Amazon Web Services ブログ

AWS IoT によるコスト効率の高いスマートホーム向けビデオ監視プラットフォームの設計に関する考慮事項

はじめに

監視カメラやスマートホームデバイス向けのコスト効率の高いクラウド接続ビデオプラットフォームを設計および開発するには、開発者は非構造化メディアデータを大規模に取り込み、保存、処理できるストリーミングサービスを設計し統合する必要があります。

このようなプラットフォームを支えるインフラは、大量のデータ負荷を処理し、突然の予測不可能な需要急増にも柔軟に対応する必要があります。バッファリングやレイテンシから、接続の切断やデータストレージの問題まで、スマートホームデバイスからのビデオストリーミングには困難がつきまといます。したがって、スマートカメラソリューションの重要な目標の1つは、数百万台のデバイス、数兆のメッセージ、ペタバイトのデータをサポートする柔軟性とスケーラビリティです。

サーバーレスコンピューティングは、サーバーのプロビジョニングの必要性をなくし、自動的なスケーリング、実際の使用量にのみ課金することによるコストの最適化を可能にし、耐障害性と高可用性が組み込まれています。サーバーレスアーキテクチャは、俊敏性を促進し、オペレーション複雑さを軽減し、ビジネスの市場投入までの時間を短縮します。

考慮事項

スケーラブルで信頼性が高く、効率的なビデオストリーミングサービスを提供できるスマートカメラソリューションを実現するには、高帯域幅と低遅延のネットワークパフォーマンスを提供するサーバー、ストレージ、ネットワークハードウェアの管理に関連するコストを考慮する必要があります。ハードウェアの調達、設置、保守を避けることで、スタッフは差別化されたアプリケーションの作成やより良いユーザーエクスペリエンスの提供に集中できます。

Amazon Kinesis Video Streams はフルマネージド型の AWS サービスで、サーバーをプロビジョニングしなくても、ストレージ、分析、再生のためにメディアを安全にストリーミングできます。アプリケーションやデバイス間でメディアを安全にストリーミングするために、シグナリングサーバーやメディアリレーサーバーなどの WebRTC (Web Real-Time Communication) 関連のクラウドインフラストラクチャを構築、運用、または拡張する必要はありません。そのため、コネクテッドプロダクト向けに AWS IoT と組み合わせるには理想的なサービスです。

HTTP Live Streaming (HLS) と Dynamic Adaptive Streaming over HTTP (DASH) は、録画済みのオンデマンドおよびライブビデオコンテンツをサーバーから配信するために使用される2つのストリーミングプロトコルです。WebRTC はオープンソースのプロジェクトであり、Webブ ラウザやモバイルアプリケーション間で直接、リアルタイムかつ低遅延のピアツーピア通信を可能にする一連の技術です。Amazon Kinesis Video Streams では、ライブ動画ストリーミングを提供するオプションを 2 つ選択できます。HLS と DASH によるストリームからの動画再生と、WebRTC による低レイテンシーの双方向メディアストリーミングです。

HLS や DASH でストリーミングする場合、Kinesis Video Streams からインターネットへのデータ転送料金が発生します。Kinesis Video Streams では、取り込まれたデータおよび消費されたデータに対して GB 単位で課金されます。インターネットから AWS へのデータには追加料金はありません。インターネットに転送されるデータは、2021 年 12 月 1 日以降、毎月最初の 100 GB まで無料です。それ以降のデータ転送には GB あたりの追加料金がかかります。

さらなるコスト削減には、圧縮してデータレートを下げるか、ビデオストリームの動的ビットレートとフレームレートを調整することで、実現できます。24時間365日のストリーミングシナリオでは、ビットレートを許容できる最小値まで下げることをお勧めします。製品で使用されるビットレートは、Kinesis Video Streams サービス全体のコストに大きく影響します。

Kinesis Video Streams は、H.264 (Advanced Video Coding もしくは AVC) and H.265 (High Efficiency Video Coding もしくは HVEC) など、さまざまなビデオコーデックをサポートしています。違いとそのトレードオフについて詳しくは、このブログ記事をご覧ください。製品のコーデックを選択する際には、ビデオとオーディオの全体的な品質、有効ビットレート、生成されるデータ量、およびハードウェアの機能を考慮する必要があります。

HLS や DASH でライブストリーミングする場合、データ送信コストは、プラットフォームのカメラ数とユーザー数に応じて増減します。Kinesis Video Streams with WebRTC 接続によるピアツーピア接続を使用すると、クラウドからのデータ転送を回避できます。

Kinesis Video Streams with WebRTC は、シグナリングチャネルを使用してピア間で接続情報を交換します。その後、ピア同士は AWS クラウドからデータを送受信する代わりに、互いに直接接続してライブストリーミングを行います。月ごとにアクティブなシグナリングチャネルと、送受信されたシグナリングメッセージの数に応じて課金されます。リレーサーバーを使用せずに、ビデオコンテンツをピアツーピアで直接ストリーミングすることに対する料金はかかりません。制限のあるネットワーク条件のために直接接続できない場合は、Kinesis Video Streams が提供するリレーサーバー (TURN) が使用されます。このサーバーは、接続を確保するためにピア間のメディアトラフィックを中継します。TURNサーバー経由でメディアトラフィックを中継する場合、ストリーミング分単位で課金され、最初の100GB以降のデータ転送にはGBあたりの追加料金がかかります。

アーキテクチャの概要

監視カメラプラットフォームのアーキテクチャ図

図1 監視カメラプラットフォームのアーキテクチャ図

Amazon Kinesis Video Streams のフルマネージドな機能により、アプリケーションやデバイス間でメディアをセキュアにストリーミングするために、シグナリングサーバーやメディアリレーサーバーなどの WebRTC 関連のクラウドインフラストラクチャを構築、運用、または拡張する必要はありません。Kinesis Video Streams with WebRTC SDK をカメラとクライアントで使用します。

これまで、ピアツーピア接続を使用してスマートカメラからクライアントにビデオをストリーミングする方法について説明し、コストに関する考慮事項を共有しました。このアーキテクチャのもう1つの要素は、スマートデバイスが適切に機能するようにするためのプロビジョニング、構成、セキュリティ、メンテナンスなど、スマートカメラ自体の管理と制御です。

AWS IoT Core を使用してスマートカメラを AWS にオンボーディングし、デバイスと AWS 間でセキュアな接続を実装してスマートカメラを管理できます。このサービスには、デバイスゲートウェイとメッセージブローカーが含まれます。カメラから AWS IoT Core への通信は、軽量なパブリッシュ/サブスクライブ型ネットワークプロトコルである MQTT に基づいています。

スマートホームデバイスと AWS クラウド間の接続を保護する推奨の方法は、X.509 証明書を使用することです。この証明書により、カメラが AWS 上のサービスにアクセスすることを許可できます。AWS IoT Core では、デバイスごとに個別の証明書を大規模に生成して登録できます。このアーキテクチャでは、クレームによるフリートプロビジョニングが使用されます。

ブートストラップ証明書はカメラに保存され、プロビジョニング時に固有のデバイス証明書と自動的に交換されます。プロビジョニングプロセス中、AWS Lambda 関数は、製造されたすべての監視カメラのシリアル番号などの情報を保持するデータベーステーブルを読み取り、サービスにアクセスしているカメラを確認します。

このアーキテクチャでは、サーバーレスのキーバリューデータベースサービス Amazon DynamoDB を使用してアイデンティティを検証し、ユーザーとデバイスのデータを保存します。DynamoDB は AWS IoT サービスとシームレスに統合され、規模によらず一貫した 1 桁ミリ秒のレイテンシーを実現し、IoT データのリアルタイム処理と分析を可能にします。

クライアント側での通信では、サーバーレスの認証および認可パターンを実装して、バックエンドサービスへのアクセスを制御できます。Amazon Cognito には、ユーザー名、E メールアドレス、電話番号などのユーザーのプロファイル属性を格納するユーザーディレクトリが用意されています。クライアントは Cognito からアクセストークンを受け取り、ユーザーを確認したり、バックエンドサービスや監視カメラへのアクセスを承認したりします。

Amazon API Gateway は、Amazon Cognito と統合された REST API を提供することによってアクセストークンの検証を処理します。これにより、認証されたユーザーは、Amazon API Gateway を使用してクライアントからのリクエストをバックエンドサービスにプロキシできます。

このアーキテクチャでリクエストを受け取ったり返したりするバックエンドサービスは AWS Lambda で構築されており、オンデマンドでコードを実行できます。Lambda 関数を使用して製造元のデータベースを読み取り、デバイスを検証したり、ユーザーアカウントをカメラに紐づけたりできます。Lambda は、Kinesis Video Streams 上のカメラのシグナリングチャネルにアクセスするために、AWS Identity and Access Management (IAM) にオンデマンドでセッション認証情報をリクエストします。生成された認証情報を使用して、クライアントを互いに分離できます。

手順

Amazon Kinesis Video Streams Serverless Surveillance Platform をアカウントにデプロイする際には費用が発生します。手順の確認が終わったら、クリーンアップセクションの手順に従ってインフラストラクチャーを削除し、料金が発生しないようにしてください。

リポジトリの README ファイルを見ると、プラットフォームサンプルの構成要素を詳しく理解できます。

AWS Cloud9 を使用してコードサンプルをデプロイできます。Cloud9は、開発者がウェブブラウザを使用してコードを書き、デバッグし、共同作業できるクラウドベースのプラットフォームを提供します。これにより、どこからでも便利にアクセスできるようになります。コードサンプルは Cloud9 を使用してテストされているため、ローカルでのセットアップと設定の必要性を削減しています。

ステップ1: Cloud9 環境の作成

  1. AWS マネジメントコンソールで Cloud9 を開きます
  2. 環境を作成を選択します
  3. 名前を surveillance-camera-ide にします
  4. 作成を選択し、環境が作成されるのを待ちます
  5. surveillance-camera-ide を選択し、Cloud9 で開くを選択します
  6. Cloud9 でターミナルを開きます
  7. Amazon Kinesis Video Streams Serverless Surveillance Platform リポジトリをクローンします
    git clone https://github.com/aws-samples/amazon-kinesis-video-streams-serverless-surveillance-platform.git

ステップ2: 監視カメラプラットフォームのデプロイ

  1. ブラウザから Cloud9 の ID をコピーします。例:<REGION>.console.aws.amazon.com/cloud9/ide/59f5e14c6cdb4fbb95f61f107b5ad86dブラウザバーから IDE 識別子を選択します。
  2. 次のように、Cloud9 ID のルートディレクトリからインフラストラクチャをインストールします
    cd infrastructure
    sh ./install-infrastructure.sh 59f5e14c6cdb4fbb95f61f107b5ad86d
  3. 以下のようにルートディレクトリからカメラモックをデプロイします
    cd camera
    sh ./install-mock.sh
  4. カメラのデプロイには最大 10 分かかります
  5. 以下のようにウェブクライアントをルートディレクトリからデプロイします
    cd web-client
    yarn install --silent
    yarn start
  6. https://59f5e14c6cdb4fbb95f61f107b5ad86d.vfs.cloud9.<REGION>.amazonaws.com を開きます
  7. (別の方法)
    1. Cloud9 のトップバーから Preview を選択します
    2. Preview Running Application を選択します
      実行中のアプリケーションをプレビュー
    3. プレビュー画面で Pop Out Into New Window を選択します
      新しいウィンドウにポップアウト

ステップ3: ログインとアカウントへのカメラの紐付け

  1. UsernamePassword をコピーして Login を選択します
  2. 認証情報を入力し、新しいパスワードを選択します
  3. Cognito Hosted UI でソフトウェア MFA をセットアップします
  4. 提供された Serial numberSecret を入力し、Submit を選択します
  5. カメラモックのプロビジョニングステータスが true になったら、表から BCM2835-00000000b211cf11 を選択します。
    1. ステータスの更新をリクエストしたり、エラーが発生したりする場合は、ページを更新してください
  6. カメラモックからのテストストリームが以下のように表示されます

    カメラモックからのウェブクライアントサンプルストリーム

    図2 カメラモックからのウェブクライアントサンプルストリーム

クリーンアップ

インフラストラクチャ、カメラモック、Cloud9 環境を削除

  1. 次のように、Cloud9 IDE 内のルートディレクトリからインフラストラクチャを削除します
    cd infrastructure
    sh ./uninstall-infrastructure.sh
  2. 以下のように、Cloud9 IDE 内のルートディレクトリからカメラモックを削除します
    cd camera
    sh ./uninstall-mock.sh
  3. AWS マネジメントコンソールで Cloud9 を開きます
  4. surveillance-camera-ide を選択します
  5. 削除を選択します

まとめ

上記のアーキテクチャの通り、クラウド接続された監視カメラを構築する方法を紹介しました。考慮事項を念頭に置くことで、価格モデルを決定し、AWS IoT を使用してコスト効率の高いクラウド接続ビデオ監視プラットフォームを構築できます。次のステップとして、以下のリソースを読んで、ユーザに最先端の機能とユースケースを提供できます。

  • Amazon Rekognition では、ライブ動画ストリームにリアルタイムアラートを統合できます。こちらのブログ記事を参照ください
  • 独自の機械学習モデルを、クラウドに接続せずに推論を行うカメラに提供します。詳細はこちらをご覧ください
  • AWS Panorama のような機械学習アプライアンスを使用して、ビデオストリームのデータをローカルでストリーミングして処理します。このブログ記事を読んで、他のお客様が IoT サービスをどのように活用しているかをご覧ください。
  • 機械学習パイプラインを構築して、Kinesis Video Streams ストリームの画像を S3 に保存してさらに処理できるようにします。この機能を実装するには、このブログ記事を参照してください。

著者について

Thorben Sanktjohanser

Thorben Sanktjohanser は、Amazon Web Services のソリューションアーキテクトであり、その専門知識を活かして中小企業のクラウドへの移行をサポートしています。Thorben は情報システムと管理のバックグラウンドを持ち、さまざまな業種の知識を集めて、最新のデータ戦略と移行について顧客とともにイノベーションを起こすことができました。彼は IoT とスマートホームデバイスの構築に情熱を注いでいます。ブラインドの上の電球から掃除機やモップまで、彼の家のほぼすべての部分が自動化されています。

この記事は Thorben Sanktjohanser によって書かれた Design considerations for cost-effective video surveillance platforms with AWS IoT for Smart Homes の日本語訳です。この記事はソリューションアーキテクトの三平が翻訳しました。