Kinesis Video Streams API とプロデューサーライブラリのサポート - Amazon Kinesis Video Streams

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Kinesis Video Streams API とプロデューサーライブラリのサポート

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

Kinesis Video Streams API

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

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

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

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

    • 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. フラグメントのメタデータリストを使用して、フラグメントを任意の順序で取得します。例えば、その日のすべてのフラグメントを処理するために、コンシューマーはリストをサブリストに分割し、ワーカー (複数の Amazon EC2 インスタンスなど) に を使用してフラグメントを並列にフェッチさせGetMediaFromFragmentList、並列に処理することを選択できます。

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

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

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

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

  • フラグメント

  • Kinesis Video Streams 固有のメタデータ。フラグメント番号、サーバー側およびプロデューサー側のタイムスタンプなど

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

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

エンドポイント検出パターン

コントロールプレーン REST APIs

Kinesis Video Streams コントロールプレーン REST APIs にアクセスするには、Kinesis Video Streams サービスエンドポイント を使用します。

データプレーン REST APIs

Kinesis Video Streams はセルラーアーキテクチャを使用して構築されており、スケーリングとトラフィック分離のプロパティが向上します。各ストリームはリージョン内の特定のセルにマッピングされるため、アプリケーションはストリームがマッピングされている正しいセル固有のエンドポイントを使用する必要があります。Data Plane REST APIsにアクセスするときは、正しいエンドポイントを自分で管理してマッピングする必要があります。エンドポイント検出パターンであるこのプロセスを以下に示します。

  1. エンドポイント検出パターンは、いずれかのGetEndpointsアクションの呼び出しから始まります。これらのアクションはコントロールプレーンに属します。

  2. エンドポイントをキャッシュして再利用します。

  3. キャッシュされたエンドポイントが機能しなくなった場合は、 を新規呼び出しGetEndpointsてエンドポイントを更新します。

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

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