Kinesis ビデオストリームの構造 - Amazon Kinesis Video Streams

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

Kinesis ビデオストリームの構造

次の構造を使用して Kinesis のビデオストリームのインスタンスにデータを提供できます。

StreamDefinition/StreamInfo

C++ レイヤーの StreamDefinition オブジェクトは、プラットフォームに依存しないコードの StreamInfo オブジェクトをラップし、コンストラクタの一部のデフォルト値を提供します。

メンバーフィールド

フィールド データタイプ 説明 デフォルト値
stream_name string オプションのストリーム名。ストリーム名の長さの詳細については、「プロデューサー SDK の制限」を参照してください。ストリームごとに一意の名前が必要です。 名前を指定しないと、名前がランダムに生成されます。
retention_period duration<uint64_t, ratio<3600>> ストリームの保持期間 (秒単位)。0 の指定は、保持なしを示します。 3600 (1 時間)
タグ const map<string, string>* ユーザー情報を含むキー/値ペアのマップ。ストリームに既存のタグセットがある場合、新しいタグは既存のタグセットに追加されます。 タグがありません
kms_key_id string ストリームの暗号化に使用される AWS KMS キー ID。詳細については、「Kinesis Video Streams データ保護」を参照してください。 デフォルト KMS キー (aws/kinesis-video)。
streaming_type STREAMING_TYPE 列挙 STREAMING_TYPE_REALTIME はサポートされる唯一の値です。
content_type string ストリームのコンテンツ形式。Kinesis Video Streams コンソールは、video/h264 形式でコンテンツを再生できます。 video/h264
max_latency duration<uint64_t, milli> ストリームの最大レイテンシー (ミリ秒)。この時間をバッファ期間が超えると、ストリームのレイテンシープレッシャーコールバック (指定されている場合) が呼び出されます。0 を指定すると、ストリームのレイテンシープレッシャーコールバックは呼び出されません。 milliseconds::zero()
fragment_duration duration<uint64_t> フラグメントの有効期間 (秒単位)。この値は、key_frame_fragmentation 値と組み合わせて使用します。この値が false の場合、この継続期間が経過すると、Kinesis Video Streams はキーフレームでフラグメントを生成します。たとえば、Advanced Audio Coding (AAC) オーディオストリームは各フレームをキーフレームとして使用します。key_frame_fragmentation = false を指定すると、この継続期間の経過後に、2 秒のフラグメントが生じます。 2
timecode_scale duration<uint64_t, milli> MKV タイムコードスケール (ミリ秒単位)。MKV クラスター内でフレームのタイムコードの詳細度を指定します。MKV フレームのタイムコードは、常にクラスターの開始を基準にします。MKV では、符号付きの 16 ビット値 (0 〜 32767) を使用してクラスター内のタイムコード (フラグメント) を示します。フレームのタイムコードが、指定したタイムコードスケールで表現できることを確認します。タイムコードスケール値のデフォルトである 1 ミリ秒の場合、表現できるフレームの最大値は 32,767 ミリ秒 ~= 32 秒です。これは、Kinesis Video Streams サービスクォータ で指定されたフラグメント継続時間の最大値 (10 秒) を超えます。 1
key_frame_fragmentation bool キーフレームでフラグメントを生成するかどうかを指定します。true の場合、SDK はキーフレームがあるたびにフラグメントの開始を生成します。false の場合、Kinesis Video Streams は少なくとも fragment_duration の期間待機してから、その後のキーフレームで新しいフラグメントを生成します。 true
frame_timecodes bool フレームのタイムコードを使用するか、現在時刻のコールバックを使用してタイムスタンプを生成するかどうかを指定します。多くのエンコーダーでは、フレームでタイムスタンプを生成しません。したがって、このパラメータに false を指定すると、確実にフレームがタイムスタンプ付きで Kinesis Video Streams に配置されます。 true
absolute_fragment_times bool Kinesis Video Streams では、基盤となるパッケージング機構として MKV を使用します。MKV の仕様では、クラスターの開始地点 (フラグメント) に相対するフレームのタイムコードは厳格です。ただし、クラスターのタイムコードはストリームの開始時刻に対して相対値の場合と絶対値の場合があります。タイムスタンプが相対値である場合、PutMedia サービスの API コールでは、オプションであるストリームの開始タイムスタンプを使用して、クラスターのタイムスタンプを調整します。このサービスで保存されるフラグメントには常に絶対値のタイムスタンプが使用されます。 true
fragment_acks bool アプリケーションレベルのフラグメント ACK (確認応答) を受信するかどうか。 true の場合、SDK は ACK を受け取り、相応に対応します。
restart_on_error bool 特定のエラー発生時に再開するかどうかを指定します。 true の場合、SDK はエラー発生時にストリーミングの再開を試行します。
recalculate_metrics bool メトリクスを再計算するかどうかを指定します。メトリクスを取得するための呼び出しごとに、再計算によって最新の「実行中」の値が取得されます。これに伴って CPU に小さな影響が生じます。電力やフットプリントが極端に低いデバイスでは、これを false に設定して、CPU サイクルの消費を抑える必要があります。それ以外の場合は、falseこの値に使用することはお勧めしません。 true
nal_adaptation_flags uint32_t

Network Abstraction Layer unit (NALU) 適応フラグを指定します。ビットストリームが H.264 でエンコードされている場合、NALU で未加工またはパッケージとして処理できます。これは Annex-B 形式または AVCC 形式のいずれかになります。エレメンタリストリームのプロデューサーとコンシューマー (読み取りエンコーダーとデコーダー) のほとんどは Annex-B 形式を使用しています。これは Annex-B 形式にはエラー回復などの利点があるためです。高レベルのシステムでは AVCC 形式を使用します。これは、MPEG、HLS、DASH などのデフォルト形式です。コンソールの再生では、ブラウザの MSE (Media Source Extensions) を使用して、AVCC 形式を使用するストリームをデコードして再生します。H.264 (および M-JPEG と H.265) の場合、SDK には適応機能が用意されています。

多くの基本ストリームは次の形式になります。この例では、Ab は Annex-B 開始コード (001 または 0001) です。

Ab(Sps)Ab(Pps)Ab(I-frame)Ab(P/B-frame) Ab(P/B-frame)…. Ab(Sps)Ab(Pps)Ab(I-frame)Ab(P/B-frame) Ab(P/B-frame)

H.264 の場合、コーデックのプライベートデータ (CPD) は SPS (シーケンスパラメータセット) と PPS (ピクチャパラメータセット) パラメータにあり、AVCC 形式に適合させることができます。メディアパイプラインで個別に CPD を指定しない限り、アプリケーションはフレームから CPD を抽出します。そのためには、最初の IDR フレーム (SPS と PPS が含まれているはずです) を探し、2 つの NALU (は SPS と PPS が含まれているはずです) を抽出し、CPD の CPD に設定します。Ab(Sps)Ab(Pps) StreamDefinition

詳細については、「NAL 適応フラグ」を参照してください。

デフォルトでは、フレームデータとコーデックプライベートデータの両方で Annex-B 形式を AVCC 形式に適応させます。
frame_rate uint32_t 予想されるフレームレート。この値を使用してバッファリングニーズの計算を効率化できます。 25
avg_bandwidth_bps uint32_t ストリームの予想される平均帯域幅。この値を使用してバッファリングニーズの計算を効率化できます。 4 * 1024 * 1024
buffer_duration duration<uint64_t> ストリームのバッファ期間 (秒単位)。SDK はフレームをコンテンツストアに最大保存しbuffer_duration、それ以降はウィンドウが先に進むにつれて前のフレームがドロップされます。ドロップされたフレームがバックエンドに送信されていない場合、ドロップされたフレームのコールバックが呼び出されます。現在のバッファ期間が max_latency より大きい場合、ストリームのレイテンシープレッシャーコールバックが呼び出されます。フラグメントの永続化 ACK が受信されると、バッファはトリミングされて次のフラグメント開始地点に送られます。これは、コンテンツがクラウド内で永続的に保持されるため、コンテンツをローカルデバイスに保存する必要がなくなるためです。 120
replay_duration duration<uint64_t> 再起動が有効になっている場合に、エラー発生時に現在のリーダーをロールバックして再生する時間 (秒単位)。ロールバックはバッファの開始位置で停止します (ストリーミングを開始したばかりであるか、永続化 ACK が受信された場合)。ロールバックは、フラグメントの開始を示すキーフレームを確定しようとします。再起動の原因となっているエラーが、ホストが停止していることを示すものではない場合 (ホストはまだ動作していて、内部バッファにフレームデータが保存されている)、ロールバックは最後に受信した ACK フレームで停止します。その後、次のキーフレームまでロールフォワードします (フラグメント全体がすでにホストメモリに保存されているため)。 40
connection_staleness duration<uint64_t> SDK がバッファリング ACK を受信しなかった場合にストリームの陳腐化コールバックが呼び出されるまでの時間 (秒単位)。デバイスからフレームが送信されているが、バックエンドがフレームを認識していないことを示します。この状況は、中間ホップまたはロードバランサーで接続が切断されていることを示します。 30
codec_id string MKV トラックのコーデック ID。 V_MPEG4/ISO/AVC
track_name string MKV トラック名。 kinesis_video
codecPrivateData unsigned char* コーデックプライベートデータ (CPD) のバッファ。ストリームの開始前に CPD に関する情報がメディアパイプラインにある場合は、StreamDefinition.codecPrivateData で設定できます。ビットがコピーされ、バッファを再利用できます。または、ストリームを作成するための呼び出し後にバッファが解放されます。ただし、ストリームの作成時にデータが利用できない場合は、関数のオーバーロードのいずれかでデータが設定されている可能性があります。KinesisVideoStream.start(cpd) null
codecPrivateDataサイズ uint32_t コーデックプライベートデータのバッファサイズ。 0

ClientMetrics

ClientMetricsオブジェクトは呼び出しによって埋められますgetKinesisVideoMetrics

メンバーフィールド

フィールド データタイプ 説明
バージョン UINT32 構造のバージョン。CLIENT_METRICS_CURRENT_VERSION マクロで定義します。
contentStoreSize UINT64 コンテンツストア全体のサイズ (バイト単位)。これは、DeviceInfo.StorageInfo.storageSize での指定値です。
contentStoreAvailableサイズ UINT64 現在使用可能なストレージサイズ (バイト)。
contentStoreAllocatedサイズ: UINT64 現在割り当てられているサイズ。割り当て済みのサイズ + 使用可能なサイズは、内部のブックキーピングとコンテンツストアの実装のため、ストレージ全体のサイズよりわずかに小さくなります。
totalContentViewsサイズ UINT64 すべてのストリームですべてのコンテンツビューに割り当てられているメモリのサイズ。これはストレージサイズには含まれません。このメモリは MEMALLOC マクロを使用して割り当てられます。これを上書きしてカスタムアロケータを指定できます。
totalFrameRate UINT64 すべてのストリームで確認された合計フレームレート。
totalTransferRate UINT64 すべてのストリームで確認された合計ストリームレート (バイト/秒)。

StreamMetrics

StreamMetricsオブジェクトは呼び出しによって埋められますgetKinesisVideoMetrics

メンバーフィールド

フィールド データタイプ 説明
バージョン UINT32 構造のバージョン。STREAM_METRICS_CURRENT_VERSION マクロで定義します。
currentViewDuration UINT64 蓄積されたフレームの時間。高速ネットワークの場合、この持続時間はゼロか、フレーム時間 (フレームが送信されている間) のどちらかです。max_latency期間がで指定されている時間よりも長くなるとStreamDefinition、ストリーム遅延コールバックが指定されていれば、そのコールバックが呼び出されます。時間は 100ns 単位で指定します。これは PIC レイヤーのデフォルトの時間単位です。
overallViewDuration UINT64 全体の表示時間。ストリームに ACK や永続化が設定されていない場合、この値は Kinesis のビデオストリームに挿入されるフレームが増えるに従って増加し、StreamDefinition に指定された buffer_duration と等しくなります。ACK が有効になっていて、永続的な ACK を受信すると、バッファは次のキーフレームにトリミングされます。これは、ACK タイムスタンプがフラグメント全体の始まりを示しているためです。時間は 100 ns 単位で指定します。これは PIC レイヤーのデフォルトの時間単位です。
currentViewSize UINT64 現在のバッファのサイズ (バイト単位)。
overallViewSize UINT64 全体の表示サイズ (バイト単位)。
currentFrameRate UINT64 現在のストリームで確認されたフレームレート。
currentTransferRate UINT64 すべてのストリームで確認された転送レート (バイト/秒)。