Kinesis Video Streams でのストリーミングメタデータの使用 - Amazon Kinesis Video Streams

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

Kinesis Video Streams でのストリーミングメタデータの使用

Amazon Kinesis Video Streams プロデューサー SDK を使うと、個々のフラグメントレベルでメタデータを Kinesis のビデオストリーム に埋め込むことができます。Kinesis Video Streams 内のメタデータは、変更可能なキーバリューのペアです。フラグメントのコンテンツを記述したり、実際のフラグメントと一緒に転送する必要がある関連するセンサーの読み取り値を埋め込んだり、その他のカスタムニーズを満たすために使用できます。メタデータは GetMedia またはGetMediaForFragmentList API オペレーションの一部として使用できます。ストリームの保存期間中は、フラグメントと一緒に保存されます。コンシューマーアプリケーションでは、を使用してメタデータを読み取り、処理し、それに基づいて対応できます。Kinesis ビデオストリームパーサーライブラリ

メタデータをストリーム内のフラグメントを埋め込むモードは 2 つあります。

  • 非永続的 — 発生したビジネス固有の基準に基づいて、ストリーム内のフラグメントに 1 回限りまたはアドホックにメタデータを添付できます。一例として、動きを検出して、Kinesis のビデオストリームに送信する前にその動きを含む対応フラグメントにメタデータを追加するスマートカメラがあります。フラグメントには、以下の形式でメタデータを適用できます。Motion = true

  • 永続的 — 必要に応じてストリーム内の連続するフラグメントにメタデータを添付できます。一例として、Kinesis のビデオストリームに送信するすべてのフラグメントに関連付けられた現在の緯度と経度の座標を送信するスマートカメラがあります。すべてのフラグメントには、以下の形式でメタデータを適用できます。Lat = 47.608013N , Long = -122.335167W

アプリケーションのニーズに基づいて、同一のフラグメントに対して同時にこのモードの両方でメタデータを付け加えられます。埋め込まれたメタデータには、検出されたオブジェクト、トラッキングされたアクティビティ、GPS 座標、またはその他のカスタムデータで、ストリームのフラグメントと関連付けるものが含まれる場合があります。メタデータはキーと値の文字列ペアとしてエンコードされます。

Kinesis ビデオストリームへのメタデータの追加

Kinesis のビデオストリームに追加するメタデータは MKV タグとしてモデル化され、キーバリューのペアとして実装されます。

メタデータは、ストリーム内のイベントをマークするなどの一時的なもの、またはあるイベントが発生したフラグメントを識別するなどの永続的なもののいずれかです。永続メタデータ項目はキャンセルされるまで残り、連続する各フラグメントに適用されます。

注記

プロデューサーライブラリ を使用して追加されたメタデータ項目は、TagStreamUntagStream、およびListTagsForStreamを使って実装されたストリームレベルのタグ付け API とは異なります。

ストリーミングメタデータ API

メタデータストリーミングを実装するために、プロデューサー SDK で以下のオペレーションを利用できます。

PIC

PUBLIC_API STATUS putKinesisVideoFragmentMetadata(STREAM_HANDLE streamHandle, PCHAR name, PCHAR value, BOOL persistent);

C++ プロデューサー SDK

/** * Appends a "tag" or metadata - a key/value string pair into the stream. */ bool putFragmentMetadata(const std::string& name, const std::string& value, bool persistent = true);

Java プロデューサー SDK

Java Producer SDK MediaSource を使用して、にメタデータを追加できますMediaSourceSink.onCodecPrivateData

void onFragmentMetadata(final @Nonnull String metadataName, final @Nonnull String metadataValue, final boolean persistent) throws KinesisVideoException;

永続メタデータと非永続メタデータ

非永続メタデータでは、同一の名前を使ったメタデータ項目を複数追加できます。プロデューサー SDK は、次のフラグメントにメタデータ項目が先頭に追加されるまで、メタデータキュー内でメタデータ項目を収集します。メタデータキューはストリームにメタデータ項目が適用されるとクリアされます。メタデータを繰り返すには、putKinesisVideoFragmentMetadata または putFragmentMetadata を再度呼び出します。

永続的なメタデータでは、プロデューサー SDK は、非永続メタデータと同様な方法で、メタデータキュー内のメタデータ項目を収集します。ただし、メタデータ項目が次のフラグメントの前に追加されても、キューからは削除されません。

putKinesisVideoFragmentMetadata または putFragmentMetadatapersistenttrue に設定して呼び出すと、以下のような動作になります。

  • API を呼び出すと、キューにメタデータ項目が追加されます。メタデータは、メタデータ項目がキュー内にある間に、フラグメントごとに MKV タグとして追加されます。

  • 同一の名前で、以前に追加されたメタデータ項目と異なるで API を呼び出すと、その項目は上書きされます。

  • 空ので API を呼び出すと、メタデータキューからそのメタデータ項目は削除 (キャンセル) されます。

Kinesis ビデオストリームに埋め込まれたメタデータの消費

Kinesis のビデオストリーム内のメタデータを使用するには、MkvTagProcessor の実装を使用します。

public interface MkvTagProcessor { default void process(MkvTag mkvTag, Optional<FragmentMetadata> currentFragmentMetadata) { throw new NotImplementedException("Default FragmentMetadataVisitor.MkvTagProcessor"); } default void clear() { throw new NotImplementedException("Default FragmentMetadataVisitor.MkvTagProcessor"); } } }

このインターフェイスは、Kinesis ビデオストリームパーサーライブラリFragmentMetadataVisitor クラスにあります。

FragmentMetadataVisitor クラスには MkvTagProcessor の実装が含まれます。

public static final class BasicMkvTagProcessor implements FragmentMetadataVisitor.MkvTagProcessor { @Getter private List<MkvTag> tags = new ArrayList<>(); @Override public void process(MkvTag mkvTag, Optional<FragmentMetadata> currentFragmentMetadata) { tags.add(mkvTag); } @Override public void clear() { tags.clear(); } }

KinesisVideoRendererExample クラスには、BasicMkvTagProcessor の使用例があります。以下の例では、BasicMkvTagProcessor があるアプリケーションの MediaProcessingArguments に追加されます。

if (renderFragmentMetadata) { getMediaProcessingArguments = KinesisVideoRendererExample.GetMediaProcessingArguments.create( Optional.of(new FragmentMetadataVisitor.BasicMkvTagProcessor()));

BasicMkvTagProcessor.process メソッドは、フラグメントのメタデータが到着すると呼び出されます。蓄積されたメタデータは GetTags を使って取得できます。1 つのメタデータ項目を取得するには、clearまず呼び出して収集したメタデータを消去し、次にメタデータ項目を再度取得します。

ストリーミングメタデータの制限

Kinesis ビデオストリームへのストリーミングメタデータの追加に適用される制限の詳細については、を参照してくださいフラグメントメタデータのクォータ