Kinesis ビデオストリーム API およびプロデューサーライブラリのサポート - Amazon Kinesis Video Streams

Kinesis ビデオストリーム API およびプロデューサーライブラリのサポート

Kinesis ビデオストリーム には、ストリームを作成および管理し、ストリーム間でメディアデータの読み取りまたは書き込みを行うための API が用意されています。Kinesis ビデオストリーム コンソールは管理機能に加えて、ライブ再生およびビデオオンデマンドの再生もサポートしています。Kinesis ビデオストリーム は、アプリケーションコードで使用すると、データをメディアソースから抽出したり、Kinesis 動画ストリームにアップロードすることができる一連のプロデューサーライブラリも提供します。

Kinesis ビデオストリーム API

Kinesis ビデオストリーム には、Kinesis 動画ストリームを作成および管理するための API が用意されています。また、メディアデータをストリームから読み取ったり、ストリームに書き込むための API も用意されています。

  • プロデューサー API – Kinesis ビデオストリーム には、メディアデータを PutMedia 動画ストリームに書き込むための Kinesis API が用意されています。PutMedia リクエストで、プロデューサーはメディアフラグメントのストリームを送信します。フラグメントとは、自己完結型のフレームのシーケンスです。フラグメントに属するフレームは、他のフラグメントからのフレームに依存していないことが求められます。詳細については、「PutMedia」を参照してください。

    フラグメントが届くと、Kinesis ビデオストリーム では一意のフラグメント番号を昇順で割り当てます。また、フラグメントごとにプロデューサー側とサーバー側のタイムスタンプを Kinesis ビデオストリーム 固有のメタデータとして保存します。

  • コンシューマー API – コンシューマーは次の API を使用して、ストリームからデータを取得できます。

    • GetMedia - この API を使用するとき、コンシューマーは開始フラグメントを識別する必要があります。次に、API はストリームに追加された順番 (昇順のフラグメント番号) でフラグメントを返します。フラグメント内のメディアデータは、Matroska (MKV) などの構造化された形式にまとめられています。詳細については、「GetMedia」を参照してください。

      注記

      GetMedia では、フラグメントの場所を認識します (データストア内にアーカイブされているか、リアルタイムで利用可能)。たとえば、開始フラグメントがアーカイブされていることを GetMedia が判断すると、フラグメントがデータストアから返され始めます。まだアーカイブされていない新しいフラグメントを返す必要がある場合、GetMedia ではメモリ内ストリームバッファからフラグメントを読み取るように切り替わります。

      これは、ストリームによって取り込まれた順番でフラグメントを処理する継続的なコンシューマーの例です。

      GetMedia では、動画処理アプリケーションが失敗したり、遅延した後でも、問題なく処理を挽回することができます。GetMedia を使用すると、アプリケーションでは、データストアにアーカイブされているデータを処理でき、アプリケーションが処理に追いついてきたところで、届いたメディアデータを GetMedia がリアルタイムで引き続き配信するようになります。

    • GetMediaFromFragmentList (および ListFragments) - バッチ処理アプリケーションはオフラインコンシューマーと見なされます。オフラインコンシューマーは、ListFragmentsGetMediaFromFragmentList の API を組み合わせることで、特定のメディアフラグメントまたは動画の範囲を明示的にフェッチできます。ListFragments および GetMediaFromFragmentList を使用すると、アプリケーションは、特定の時間範囲またはフラグメント範囲の動画のセグメントを識別し、これらのフラグメントを順番に、または並行して処理するためにフェッチできます。このアプローチは、大量のデータを並行して迅速に処理する必要がある MapReduce アプリケーションに適しています。

      たとえば、コンシューマーが 1 日分の動画フラグメントを処理する必要があるとします。コンシューマーは次のことを行います。

      1. ListFragments API を呼び出し、時間範囲を指定して目的のフラグメントのコレクションを選択することで、フラグメントのリストを取得します。​

        API は、指定された時間範囲内のすべてのフラグメントからメタデータを返します。メタデータは、フラグメント番号、プロデューサー側/サーバー側のタイムスタンプなどの情報を提供します。

      2. フラグメントのメタデータリストを使用して、フラグメントを任意の順序で取得します。たとえば、その日のすべてのフラグメントを処理するために、コンシューマーはリストをサブリストに分割し、GetMediaFromFragmentList を使用して同時にフラグメントをフェッチして、これらを並行して処理するようにワーカー (複数の Amazon EC2 インスタンスなど) に指示することができます。

次の図は、これらの API コール中のフラグメントとチャンクのデータフローを示しています。


                    API コール中のフラグメントとチャンクのデータフローを示した図

プロデューサーが PutMedia リクエストを送信するときは、ペイロード内のメディアメタデータを送信してから、メディアデータフラグメントのシーケンスを送信します。Kinesis ビデオストリーム はデータを受け取ると、Kinesis ビデオストリーム チャンクとして着信メディアデータを保存します。各チャンクは以下で構成されています。

  • メディアメタデータのコピー

  • フラグメント

  • フラグメント番号やサーバー側およびプロデューサー側のタイムスタンプなどの Kinesis ビデオストリーム 固有のメタデータ

コンシューマーがメディアメタデータをリクエストすると、Kinesis ビデオストリーム では、リクエストで指定されたフラグメント番号から始まるチャンクのストリームを返します。

ストリームのデータの永続性を有効にした場合、Kinesis ビデオストリーム はストリームでフラグメントを受け取った後に、フラグメントのコピーをデータストアに保存します。

プロデューサーライブラリ

Kinesis 動画ストリームの作成後は、ストリームへのデータの送信を開始できます。アプリケーションコードで、これらのライブラリを使用してデータをメディアソースから抽出したり、Kinesis 動画ストリームにアップロードすることができます。使用可能なプロデューサーライブラリの詳細については、「Kinesis ビデオストリーム プロデューサーライブラリ」を参照してください。