

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

# Kinesis Video Streams API とプロデューサーライブラリのサポート
<a name="how-it-works-kinesis-video-api-producer-sdk"></a>

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

**Topics**
+ [Kinesis Video Streams API](#how-it-works-kinesis-video-api)
+ [エンドポイント検出パターン](#how-it-works-api-pattern)
+ [プロデューサーライブラリ](#how-it-works-producer-sdk)

## Kinesis Video Streams API
<a name="how-it-works-kinesis-video-api"></a>

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

  フラグメントが届くと、Kinesis Video Streams では一意のフラグメント番号を昇順で割り当てます。また、各フラグメントのプロデューサー側とサーバー側のタイムスタンプを Kinesis Video Streams 固有のメタデータとして保存します。
+ **コンシューマー APIs** – コンシューマーは、次の APIs を使用してストリームからデータを取得できます。
  + `GetMedia` - この API を使用するとき、コンシューマーは開始フラグメントを識別する必要があります。次に、API はストリームに追加された順番 (昇順のフラグメント番号) でフラグメントを返します。フラグメント内のメディアデータは、[Matroska (MKV)](https://www.matroska.org/technical/specs/index.html) などの構造化された形式にまとめられています。詳細については、「[GetMedia](API_dataplane_GetMedia.md)」を参照してください。
**注記**  
`GetMedia` では、フラグメントの場所を認識します (データストア内にアーカイブされているか、リアルタイムで利用可能)。たとえば、開始フラグメントがアーカイブされていることを `GetMedia` が判断すると、フラグメントがデータストアから返され始めます。まだアーカイブされていない新しいフラグメントを返す必要がある場合、 はインメモリストリームバッファからのフラグメントの読み取り`GetMedia`に切り替えます。

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

    `GetMedia` では、動画処理アプリケーションが失敗したり、遅延した後でも、問題なく処理を挽回することができます。`GetMedia` を使用すると、アプリケーションでは、データストアにアーカイブされているデータを処理でき、アプリケーションが処理に追いついてきたところで、届いたメディアデータを `GetMedia` がリアルタイムで引き続き配信するようになります。
  + `GetMediaFromFragmentList` (および `ListFragments`) - バッチ処理アプリケーションはオフラインコンシューマーと見なされます。オフラインコンシューマーは、`ListFragments` と `GetMediaFromFragmentList` の API を組み合わせることで、特定のメディアフラグメントまたは動画の範囲を明示的にフェッチできます。`ListFragments` および `GetMediaFromFragmentList` を使用すると、アプリケーションは、特定の時間範囲またはフラグメント範囲の動画のセグメントを識別し、これらのフラグメントを順番に、または並行して処理するためにフェッチできます。このアプローチは、大量のデータを並行して迅速に処理する必要がある `MapReduce` アプリケーションに適しています。

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

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

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

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

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

![API コール中のフラグメントとチャンクのデータフローを示した図](http://docs.aws.amazon.com/ja_jp/kinesisvideostreams/latest/dg/images/arch-20.png)


プロデューサーが `PutMedia` リクエストを送信するときは、ペイロード内のメディアメタデータを送信してから、メディアデータフラグメントのシーケンスを送信します。Kinesis Video Streams はデータを受け取ると、Kinesis Video Streams のチャンクとして着信メディアデータを保存します。各チャンクは以下で構成されています。
+ メディアメタデータのコピー
+ フラグメント
+ Kinesis Video Streams 固有のメタデータ。フラグメント番号、サーバー側およびプロデューサー側のタイムスタンプなど

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

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

## エンドポイント検出パターン
<a name="how-it-works-api-pattern"></a>

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

[Kinesis Video Streams コントロールプレーン REST APIs](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_Operations_Amazon_Kinesis_Video_Streams.html) にアクセスするには、[Kinesis Video Streams サービスエンドポイント](https://docs.aws.amazon.com//general/latest/gr/akv.html#akv_region)を使用します。

**データプレーン REST APIs**

Kinesis Video Streams は、セル[ラーアーキテクチャ](https://docs.aws.amazon.com//wellarchitected/latest/reducing-scope-of-impact-with-cell-based-architecture/what-is-a-cell-based-architecture.html)を使用して構築され、スケーリングとトラフィック分離のプロパティを向上させます。各ストリームはリージョン内の特定のセルにマッピングされるため、アプリケーションはストリームがマッピングされた正しいセル固有のエンドポイントを使用する必要があります。Data Plane REST APIs にアクセスするときは、適切なエンドポイントを自分で管理してマッピングする必要があります。このプロセスを示したエンドポイント検出パターンの詳細は次のとおりです。

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

   1. [Amazon Kinesis Video Streams Media](API_Operations_Amazon_Kinesis_Video_Streams_Media.md) または [Amazon Kinesis Video Streams Archived Media](API_Operations_Amazon_Kinesis_Video_Streams_Archived_Media.md)サービスのエンドポイントを取得する場合は、 を使用します[GetDataEndpoint](API_GetDataEndpoint.md)。

   1. [Amazon Kinesis Video Signaling Channels](API_Operations_Amazon_Kinesis_Video_Signaling_Channels.md)、、[Amazon Kinesis Video WebRTC ストレージ](API_Operations_Amazon_Kinesis_Video_WebRTC_Storage.md)または [Kinesis Video Signaling](https://docs.aws.amazon.com//kinesisvideostreams-webrtc-dg/latest/devguide/kvswebrtc-websocket-apis.html) のエンドポイントを取得する場合は、 を使用します[GetSignalingChannelEndpoint](API_GetSignalingChannelEndpoint.md)。

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

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

## プロデューサーライブラリ
<a name="how-it-works-producer-sdk"></a>

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