本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 Kinesis Video Streams 中使用流媒体元数据
你可以使用 Amazon Kinesis Video Streams SDK 制作器在 Kinesis 视频流中嵌入单个片段级别的元数据。Kinesis Video Streams 中的元数据是一个可变的键值对。您可以使用它来描述片段的内容,嵌入必须与实际片段一起传输的相关传感器读数,或者满足其他自定义需求。元数据作为GetMedia或GetMediaForFragmentListAPI操作的一部分提供。它与片段一起存储在直播的整个保留期内。您的消费应用程序可以使用基于元数据进行读取、处理和响应使用解析器库观看摄像机的输出。
可通过以下两种模式在数据流片段中嵌入元数据:
-
非持续 — 您可以根据已出现的业务特定标准,一次性或临时将元数据附加到流中的片段。例如,智能相机可以检测动作,并在将片段发送到其 Kinesis 视频流之前,向包含动作的相应片段添加元数据。您可以采用以下格式将元数据应用于片段:
Motion = true
。 -
持续-您可以根据持续需要将元数据附加到流中连续的片段。例如,智能相机将与其发送的所有片段关联的当前纬度和经度坐标发送到其 Kinesis 视频流。您可以采用以下格式将元数据应用于所有片段:
Lat = 47.608013N , Long = -122.335167W
。
您可以根据应用程序的需求,将这两种模式的元数据同时附加到同一个片段中。嵌入的元数据可能包括检测到的对象、跟踪的活动、GPS坐标或您要与流中的片段关联的任何其他自定义数据。元数据编码为键值字符串对。
向 Kinesis 视频流添加元数据
您添加到 Kinesis 视频流中的元数据将建模为MKV标签,标签以键值对的形式实现。
元数据可以是临时的,如用于标记数据流内的事件,也可以是持久的,如用于识别发生给定事件的片段。永久性元数据项将保留,并应用于每个连续的片段,直到它被取消。
注意
使用添加的元数据项不同上传到 Kinesis Video Streams于使用TagStreamUntagStream、和APIs实现的流级标记。ListTagsForStream
流式传输元数据 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 生成SDKMediaSource
器通过以下方式向添加元数据MediaSourceSink.onCodecPrivateData
:
void onFragmentMetadata(final @Nonnull String metadataName, final @Nonnull String metadataValue, final boolean persistent) throws KinesisVideoException;
永久和非持久元数据
对于非持久元数据,您可以添加多个具有相同名称 的元数据项目。创建者SDK收集元数据队列中的元数据项,直到它们被添加到下一个片段之前。在将元数据项目应用到数据流时,将清除元数据队列。要重复元数据,请再次调用 putKinesisVideoFragmentMetadata
或 putFragmentMetadata
。
对于永久性元数据,创建者在元数据队列中SDK收集元数据项的方式与收集非永久性元数据的方式相同。但是,当元数据项被添加到下一个片段之前时,它们不会从队列中删除。
在将 persistent
设置为 true
时调用 putKinesisVideoFragmentMetadata
或 putFragmentMetadata
会出现以下行为:
-
调用会API将元数据项置于队列中。当项目在队列中时,元数据将作为MKV标签添加到每个片段中。
-
API使用与先前添加的元数据项相同的名称和不同的值调用会覆盖该项目。
-
API使用空值调用会将元数据项从元数据队列中删除(取消)。