Kinesis Video Streams データモデル - Amazon Kinesis Video Streams

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

Kinesis Video Streams データモデル

Kinesis Video Streams へのアップロード および パーサーライブラリを使用してカメラからの出力を監視する は、動画データに伴う情報の埋め込みをサポートする形式で動画データを送受信します。この形式は Matroska (MKV) 仕様に基づいています。

MKV 形式は、メディアデータに対するオープン仕様です。Amazon Kinesis Video Streams Developer Guide 内のすべてのライブラリおよびコードの例は、MKV 形式でデータを送受信します。

Kinesis Video Streams へのアップロードStreamDefinitionおよび Frameタイプを使用して、MKV ストリームヘッダー、フレームヘッダー、フレームデータを生成します。

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

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

ストリームヘッダー要素

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

要素 説明 一般的な値
stream_name Kinesis のビデオストリームの名前。 my-stream
retention_period ストリームデータが Kinesis Video Streams によって保持される時間単位の期間。データを保持しないストリーム0には を指定します。 24
[タグ] ユーザーデータのキーと値のコレクション。このデータは AWS Management Console に表示され、クライアントアプリケーションにより読み取ることでストリームに関する情報をフィルタリングまたは取得できます。
kms_key_id 存在する場合、ユーザー定義 AWS KMS キーを使用してストリーム上のデータを暗号化します。存在しない場合、データは Kinesis が提供するキー () によって暗号化されますaws/kinesisvideo 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 Video Streams は受信したフレームの表示タイムスタンプ (pts) とデコードタイムスタンプ (dts) の値を使用します。の場合false、Kinesis Video Streams はシステム生成の時間値でフレームを受信したときにフレームをスタンプします。 true
absolute_fragment_time true の場合、クラスタータイムコードは絶対時間 (プロデューサーのシステムクロックなど) を用いて解釈されます。false の場合、クラスタータイムコードはストリームの開始時刻の相対値として解釈されます。 true
fragment_acks true の場合、Kinesis Video Streams がデータを受信した際に確認 (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 コンテンツ帯域幅の Mbps 単位の推定値。この値は最適化に使用され、実際のレートは受信データの帯域幅により決定されます。たとえば、25 FPS で動作する 720p の解像度のビデオストリームでは、平均 5 Mbps の帯域幅を期待できます。 5
buffer_duration コンテンツがプロデューサー上でバッファされる時間。ネットワークレイテンシーが低い場合は、この値を減らすことができます。ネットワークレイテンシーが高い場合、この値を大きくすると、割り当てがフレームをより小さいバッファに入れることに失敗したため、送信前にフレームがドロップされるのを防ぎます。
replay_duration 接続が失われた場合にビデオデータストリームが「巻き戻し」される時間。この値は、接続損失によるフレームの損失が懸念されない場合、ゼロになることがあります。消費側アプリケーションが冗長フレームを削除できる場合は、値を増やすことができます。この値はバッファ期間より短くする必要があります。そうでない場合はバッファ期間が使用されます。
connection_staleness データが受信されない場合に接続を維持する期間。
codec_id コンテンツで使用されるコーデック。詳細情報については Matroska 仕様の「CodecID」を参照してください。 V_MPEG2
track_name ユーザー定義のトラック名。 my_track
codecPrivateData 多くのダウンストリームコンシューマーにおいて必要となる、フレームデータのデコードのためにエンコーダーが提供するデータ (ピクセル単位でのフレーム幅および高さなど)。C++ プロデューサーライブラリでは、 のgMkvTrackVideoBits配列にフレームのピクセル幅と高さMkvStatics.cppが含まれます。
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 配列にフレームのピクセル幅と高さが含まれています。 MkvStatics.cpp
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: このフレームがデコードされた時刻のタイムスタンプ。以前のフレームがデコードのためにこのフレームに依存している場合、このタイムスタンプは以前のフレームよりも前になる可能性があります。この値はフラグメントの開始の相対値です。

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

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

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

MKV フレームデータ

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