Kinesis ビデオストリーム データモデル - Amazon Kinesis Video Streams

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

Kinesis ビデオストリーム データモデル

プロデューサーライブラリ および ストリームパーサーライブラリ は、動画データに伴う情報の埋め込みをサポートする形式で動画データを送受信します。この形式は Matroska (MKV) 仕様に基づいています。

MKV 形式は、メディアデータに対するオープン仕様です。Amazon Kinesis ビデオストリーム 開発者ガイド 内のすべてのライブラリおよびコード例は、MKV 形式でデータを送受信します。

Kinesis ビデオストリーム プロデューサーライブラリStreamDefinition および Frame タイプを使用して MKV ストリームヘッダー、フレームヘッダー、フレームデータを作成します。

MKV 仕様の詳細については「Matroska Specification」を参照してください。

以下のセクションでは、C++ プロデューサーライブラリ によって作成された MKV 形式データのコンポーネントについて説明します。

ストリームヘッダー要素

StreamDefinition では次の MKV ヘッダー要素が使用されます (StreamDefinition.h で定義)。

要素 説明 一般的な値
stream_name Kinesis ビデオストリーム の名前に対応しています。 my-stream
retention_period ストリームデータが Kinesis ビデオストリーム によって保持される期間。データを保持しないストリーム 0 を指定します。 24
タグ ユーザーデータのキーと値のコレクション。このデータは AWS マネジメントコンソール に表示され、クライアントアプリケーションにより読み取ることでストリームに関する情報をフィルタリングまたは取得できます。
kms_key_id 存在する場合、ストリーム上のデータの暗号化に使用されるユーザー定義の AWS KMS マスターキー。存在しない場合、データは Kinesis が提供するマスターキーで暗号化されます (aws/kinesis-video)。 01234567-89ab-cdef-0123-456789ab
streaming_type 現在、有効なストリーミングタイプは STREAMING_TYPE_REALTIME のみです。 STREAMING_TYPE_REALTIME
content_type ユーザー定義のコンテンツタイプ。動画データをストリーミングしてコンソールで再生する場合、コンテンツタイプは video/h264 である必要があります。 video/h264
max_latency この値は現在使用されておらず、0 に設定する必要があります。 0
fragment_duration フラグメントの継続時間 (推定)。この時間が最適化に使用されます。実際のフラグメント継続時間は、ストリーミングデータによって決定します。 2
timecode_scale

フレームタイムスタンプが使用するスケールを示します。デフォルト値は 1 ミリ秒です。0 を指定すると、デフォルト値の 1 ミリ秒も割り当てられます。この値は 100 ナノ秒~1 秒の範囲で指定できます。

詳細については、Matroska のドキュメントの「TimecodeScale」を参照してください。

key_frame_fragmentation true の場合、ストリームはキーフレームが受信された場合に新たなクラスターを開始します。 true
frame_timecodes true の場合、Kinesis ビデオストリーム は受信された場合にフレームをスタンプします。false の場合、Kinesis ビデオストリーム は受信したフレームのデコード時間を使用します。 true
absolute_fragment_time true の場合、クラスタータイムコードは絶対時間 (プロデューサーのシステムクロックなど) を用いて解釈されます。false の場合、クラスタータイムコードはストリームの開始時刻の相対値として解釈されます。 true
fragment_acks true の場合、Kinesis ビデオストリーム がデータを受信した際に確認 (ACK) が送信されます。ACK は KinesisVideoStreamFragmentAck または KinesisVideoStreamParseFragmentAck コールバックを用いて受信できます。 true
restart_on_error ストリームのエラーが発生した後、ストリームが送信を再開すべきかどうかを示します。 true
nal_adaptation_flags コンテンツ内に NAL (Network Abstraction Layer) 適応またはコーデックプライベートデータが含まれるかどうかを示します。有効なフラグには NAL_ADAPTATION_ANNEXB_NALS および NAL_ADAPTATION_ANNEXB_CPD_NALS が含まれます。 NAL_ADAPTATION_ANNEXB_NALS
frame_rate コンテンツの推定フレームレート。この値は最適化に使用され、実際のフレームレートは受信データのレートにより決定されます。0 を指定すると、デフォルトの 24 が割り当てられます。 24
avg_bandwidth_bps コンテンツの推定帯域幅。この値は最適化に使用され、実際のレートは受信データの帯域幅により決定されます。たとえば、25 FPS で動作する 720p の解像度のビデオストリームでは、平均 5 Mbps の帯域幅を期待できます。 5
buffer_duration コンテンツがプロデューサー上でバッファされる時間。ネットワークレイテンシーが低い場合はこの値を減らすことができます。ネットワークレイテンシーが高い場合は、この値を増やすことで、割り当てによりフレームをより小さいバッファに入れることができないためにフレームが送信前にドロップするのを回避できます。
replay_duration 接続が失われた場合、動画データストリームが「巻き戻し」を行う時間量。接続損失によるロストフレームが懸念されない場合はこの値を 0 に設定できます。受信側アプリケーションが冗長フレームを排除できる場合は、この値を増やすことができます。この値はバッファ期間より小さくする必要があります。それ以外の場合、バッファ期間が使用されます。
connection_staleness データが受信されない場合に接続を維持する期間。
codec_id コンテンツで使用されるコーデック。詳細情報については Matroska 仕様の「CodecID」を参照してください。 V_MPEG2
track_name ユーザー定義のトラック名。 my_track
codecPrivateData 多くのダウンストリームコンシューマーにおいて必要となる、フレームデータのデコードのためにエンコーダーが提供するデータ (ピクセル単位でのフレーム幅および高さなど)。C++ プロデューサーライブラリでは、MkvStatics.cpp 内の gMkvTrackVideoBits 配列にはフレームのピクセル幅および高さが含まれます。
codecPrivateDataSize codecPrivateData パラメータのデータのサイズ。
track_type ストリームのトラックのタイプ。 MKV_TRACK_INFO_TYPE_AUDIO または MKV_TRACK_INFO_TYPE_VIDEO
segment_uuid ユーザー定義のセグメント uuid (16 バイト)。
default_track_id トラックの、一意のゼロ以外の数。 1

トラックデータのストリーミング

StreamDefinition では次の MKV トラック要素が使用されます (StreamDefinition.h で定義)。

要素 説明 一般的な値
track_name ユーザー定義のトラック名。たとえば、オーディオトラック用の「audio」。 audio
codec_id トラック用のコーデック ID。たとえば、オーディオトラック用の「A_AAC」。 A_AAC
cpd フレームデータのデコードのためにエンコーダーが提供するデータ。このデータには、フレームの幅と高さ (ピクセル単位) を含めることができます。この情報は多くのダウンストリームコンシューマーで必要となります。C++ プロデューサーライブラリでは、MkvStatics.cpp 内の gMkvTrackVideoBits 配列にはフレームのピクセル幅および高さが含まれます。
cpd_size codecPrivateData パラメータのデータサイズ。
track_type トラックのタイプ。たとえば、オーディオ用の MKV_TRACK_INFO_TYPE_AUDIO の列挙値を使用できます。 MKV_TRACK_INFO_TYPE_AUDIO

フレームヘッダー要素

Frame では次の MKV ヘッダー要素が使用されます (mkvgen/Include.hKinesisVideoPic パッケージで定義)。

  • Frame Index: 一定間隔で増加する値.

  • Flags: フレームのタイプ。有効な値には次のようなものがあります。

    • FRAME_FLAGS_NONE

    • FRAME_FLAG_KEY_FRAME: key_frame_fragmentation がストリーム上で設定されている場合、キーフレームは新たなフラグメントを開始します。

    • FRAME_FLAG_DISCARDABLE_FRAME: デコーダーに対し、デコーディングが遅い場合はこのフレームを破棄できることを通知します。

    • FRAME_FLAG_INVISIBLE_FRAME: このブロックの時間は 0 です。

  • Decoding Timestamp: このフレームがデコードされたときのタイムスタンプ。以前のフレームのデコーディングがこのフレームに依存している場合、このタイムスタンプは以前のフレームよりも前に設定できます。この値はフラグメントの開始の相対値です。

  • Presentation Timestamp: このフレームが表示されたときのタイムスタンプ。この値はフラグメントの開始の相対値です。

  • Duration: フレームの再生時間。

  • Size: フレームデータのサイズ (バイト単位)

MKV フレームデータ

frame.frameData 内のデータには、使用されるエンコーディングスキーマに応じ、フレームのメディアデータのみが含まれている場合、あるいはさらにネスト化されたヘッダー情報が含まれている場合があります。AWS マネジメントコンソール に表示させるには、H.264 コーデックでデータをエンコードする必要がありますが、Kinesis ビデオストリーム は時間に応じてシリアル化したあらゆる形式のデータストリームを受信できます。