Amazon Web Services ブログ
AWS IoT Greengrass V2 コンポーネントを使用した Amazon Kinesis Video Streams への産業用メディアの取り込み
はじめに
多くの企業が屋内外の空間を監視してセキュリティを向上させるために、何百台ものインターネット・プロトコル (IP) カメラを設置しています。これは、自動車、商業、石油・ガス、公安、農業技術など、さまざまな業界に共通するニーズです。企業はカメラをクラウドに接続することで、サイロ化されたデータを一元管理し、デジタルツイン機能を追加することができます。この記事では、AWS IoT Greengrass V2 コンポーネントを使用して、ライブストリーミング、オンデマンドビデオアップロード、そしてローカルキャッシュが可能な Amazon Kinesis Video Streams stream uploader をパッケージ化し、デプロイする方法について説明します。
Kinesis Video Streams は、デバイスから AWS へのライブビデオのストリーミング、リアルタイムビデオ処理のためのアプリケーションの構築、ビデオのバッチ分析などに使用できるフルマネージドな AWS サービスです。Kinesis Video Streams サービスを使用して、スマートフォン、セキュリティカメラ、ウェブカメラ、ドローン、赤外線画像、音声など、さまざまなソースからビデオや非ビデオデータを取り込むことができます。最近、AWS IoT Greengrass component for Kinesis Video Streams がリリースされ、既存のデバイスからメディアをストリーミングできるようになりました。Kinesis Video Streams コンポーネントのエッジコネクタ (aws.iot.EdgeConnectorForKVS) は、Real Time Streaming Protocol (RTSP) を使用してローカル IP カメラからビデオフィードを読み取り、Kinesis Video Streams エンドポイントにストリームをパブリッシュします。
ソリューション概要
スマートビルディングソリューションを開発するある企業は、ビルの入口、入退室管理エリア、セキュリティゲートから数百のビデオストリームを取り込むアプリケーションの構築に興味を持っています。同社は、AWS IoT TwinMaker を使用してデジタルツインアプリケーションにビデオフィードを組み込み、AWS IoT TwinMaker application plugin for Grafana dashboard を使用してビデオのアップロードを行い、過去のビデオタイムラインを確認することを検討しています。
既存のカメラを改修してエンドポイントにストリーミングするのは難しい場合があります。代わりに、AWS IoT Greengrass を利用して、 エッジゲートウェイと Kinesis Video Streams 向けのエッジコネクタコンポーネントをデプロイすることで、既存のカメラからデータを取り込むことができます。このコンポーネントは同じネットワーク内の IP カメラに接続し、ビデオフィードを Kinesis Video Streams にストリーミングします。取り込み側では、アプリケーションを使用して Kinesis Video Streams のエンドポイントからデータを読み取り、クライアントとして利用可能です。このコンポーネントはエッジ上で動作し、ビデオのキャッシュ、スケジュールされた録画・アップロード、ライブストリーミング、Kinesis Video Streams への過去のビデオのアップロードなどの機能をサポートします。エッジコネクタコンポーネントは、ニーズに応じて調整可能な AWS IoT Greengrass V2 コンポーネントで、ビデオの取り込みをカスタマイズできます。
AWS IoT Greengrass ハブごとにこのコンポーネントへ接続できるカメラの数は、ベースとなるハードウェアの計算能力、ネットワーク帯域幅、およびコネクタの設定を保存するために使用される AWS IoT SiteWise の子アセットに依存します。(現在この制限は 2000 です。子アセットのクオータに関する詳細についてはこちらを参照してください。) このアーキテクチャは、AWS IoT Greengrass デバイスと AWS の間に安定したネットワーク接続があり、メディアのストリーミングに十分な帯域幅があることを前提としています。
- エッジデバイスへの AWS IoT Greengrass Core のデプロイ。このデバイスはエッジコネクタの実行とカメラとの接続を担います。Greengrass Core ソフトウェアは、Raspberry Pi などの Linux デバイスまたは Windows デバイスにデプロイすることができます。このデバイスは最終的にエッジコネクタの Kinesis Video Streams コンポーネントを実行します。AWS IoT Greengrass のセットアップ方法の詳細については、ドキュメントを参照してください。
- GStreamer バージョン 1.18.4 以降をエッジデバイスにインストールします。
- エッジデバイスのセットアップが完了したら、AWS IoT Greengrass サービスを使用して Kinesis Video Streams コンポーネントのエッジコネクタをデプロイします。デプロイ固有の詳細で設定ページを編集してください。AWS IoT Greengrass へのコンポーネントのデプロイ方法の詳細については、ドキュメントを参照してください。
- Kinesis Video Streams コンポーネントのエッジコネクタがデプロイされると、コンポーネントの構成は AWS IoT SiteWise と AWS Secrets Manager に保存されます。AWS IoT SiteWise には 2 種類のアセットが格納されます。 theEdgeConnectorForKVSHub アセットには、コネクタが実行されている固有のハブを識別するアセット名が格納され、EdgeConnectorForKVSCamera には、ストリーミングや録画を開始する cron 式のようなカメラ固有のプロパティが格納されます。詳細については、このサービスに必要な設定パラメータに関する GitHub ページを参照してください。
- Kinesis Video Streams のエッジコネクタは、カメラフィードからデータを取り込みます。Kinesis Video Streams エンドポイントにストリームするだけでなく、ローカルストレージを追加するオプションもあります。
- クライアント側では、Kinesis Video Streams エンドポイントからデータを消費する独自のカスタムアプリケーションを構築できます。例として、動きを検出したときにライブストリーミングビデオを再生させることができます。
このアーキテクチャと上記のステップを実装するための詳細な手順については、 github を参照してください。
エッジアーキテクチャの詳細
エッジアーキテクチャには、コントローラ、ビデオレコーダ、ビデオアップローダの 3 つのモジュールがあります (前の図を参照) 。Kinesis Video Streams コネクタコンポーネントのデフォルト設定はビデオのストリーミングですが、オプション機能としてローカルストレージのファイルシステムにビデオを録画する機能もあります。コントローラは、レコーダとアップローダの仲介役を果たし、両者の間の通信をサポートします。コントローラはまず、接続された入力ストリームオブジェクトと出力ストリームオブジェクトのペアを初期化します。ビデオレコーダはカメラからストリームデータを取得し、そのデータを接続された出力ストリームに格納します。最後に、ビデオアップローダが接続された入力ストリームからストリームデータを取得し、そのデータを Kinesis Video Streams にアップロードします。
ソリューションのスケーリングについて
次に、このソリューションがどのようにスケーリングするのか、サイジングと制限について見ていきます。アーキテクチャ上、Kinesis Video Streams コンポーネントのエッジコネクタと Greengrass Core にはスケーリングの制限はありません。このソリューションでは AWS IoT SiteWise を使用して RTSP カメラ構成を管理するため、唯一のハードリミットは AWS IoT SiteWise の子アセットクォータにより、親アセットあたりの子アセットが 2000 未満であることです。エッジデバイス/ハブがサポートできるカメラの数は、そのハードウェア構成にのみ依存します。十分なネットワーク帯域幅とハードウェア容量があれば、AWS IoT Greengrass デバイスはより多くのカメラをサポートすることができます。内部で行ったテストでは、同じエッジデバイスに接続された 10 台以上のカメラからのフィードを問題なく取り込むことができました。詳細については、Kinesis Video Streams API の制限とクォータのドキュメントを参照してください。
以下に、エッジデバイスの構成例と、最適なパフォーマンスでサポートできるビデオストリーム数を示します。
- 2GB RAM と 16GB SSD を搭載した小型インスタンス ( Raspberry Pi 4 Model B など) は、100 MBPS のネットワーク速度で同時に最大 2 台の1080p HD RTSP カメラをクラウドにアップロードできます。
- 4GB RAM と 16GB SSD を搭載した中インスタンス ( NVIDIA Jetson Nano Developer Kit など) は、100 MBPS のネットワーク速度で同時に最大 4 台の1080p HD RTSP カメラをクラウドにアップロードできます。
- 25GB RAM と 1TB SSD を搭載した大型インスタンス ( Intel NUC など) では、最大 24 台の1080p HD RTSP カメラを 600 MBPS のネットワーク速度で同時にクラウドにアップロードできます。
このソリューションは主にメモリに依存するため、CPU や GPU のタイプや容量などの計算リソースはあまり関係ありません。
クリーンアップ
GitHub のリンクを使用してこのアーキテクチャを実装した場合、コストが発生しないように以下の手順でリソースをクリーンアップしてください。
- エッジデバイスから Greengrass コアソフトウェアをアンインストールする。
- Kinesis Video Streams を削除する
- Kinesis Video Streams コンソールを開きます。
- 左側のメニューから「ビデオストリーム」を選択し、ビデオストリームを選択します。
- 画面右上の「ビデオストリームを削除」を選択します。
- 確認画面が表示されます。フィールドに「削除」と入力し、削除を選択します。
まとめ
本ブログでは、 AWS IoT Greengrass component for Kinesis Video Streams の概要、デプロイ可能なユースケース、このコネクタをデプロイする手順の GitHub リンクを紹介しました。AWS が提供する他の Greengrass コンポーネントと同様にこの機能を利用し、既存のデバイスに対して Kinesis Video Streams を有効にできます。デプロイ手順を含むこのソリューションの詳細については、この github リポジトリを参照してください。