Kinesis Video Streams 数据模型 - Amazon Kinesis Video Streams

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Kinesis Video Streams 数据模型

上传到 Kinesis Video Streams使用解析器库观看摄像机的输出 以某种格式发送和接收视频数据,此格式支持随视频数据一起嵌入信息。此格式基于 Matroska (MKV) 规范。

MKV格式是媒体数据的开放规范。《亚马逊 Kinesis Video Streams 开发者指南》中的所有库和代码示例都以MKV该格式发送或接收数据。

上传到 Kinesis Video Streams使用StreamDefinitionFrame类型生成MKV流标头、帧标题和帧数据。

有关完整MKV规格的信息,请参阅 Matroska 规范。

以下各节描述了由生MKV成的格式化数据的组成部分。C++

流标头元素

以下MKV标题元素由StreamDefinition(在中定义StreamDefinition.h)使用。

元素 描述 典型值
stream_name 与 Kinesis 视频流的名称相对应。 my-stream
retention_period Kinesis Video Streams 保留直播数据的持续时间(以小时为单位)。0为不保留数据的直播指定。 24
tags 用户数据的键-值集合。此数据显示在 AWS Management Console 中,可由客户端应用程序读取以筛选或获取有关流的信息。
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 Video Streams 将使用接收到的帧的演示时间戳 (pts) 和解码时间戳 (dts) 值。如果是false,Kinesis Video Streams 将在收到帧时使用系统生成的时间值对其进行标记。 true
absolute_fragment_time 如果为 true,则集群时间码将解释为使用绝对时间 (例如,来自创建者的系统时钟)。如果为 false,则集群时间码将解释为相对于流的开始时间。 true
fragment_acks 如果为true,则在 Kinesis Video Streams 收到数据时发送确认 (ACKs)。ACKs可以使用KinesisVideoStreamFragmentAckKinesisVideoStreamParseFragmentAck回调接收。 true
restart_on_error 指示在发生流错误后是否应继续传输流。 true
nal_adaptation_flags 表示内容中是否存在NAL(网络抽象层)自适应数据或编解码器私有数据。有效标记包括 NAL_ADAPTATION_ANNEXB_NALSNAL_ADAPTATION_ANNEXB_CPD_NALS NAL_ADAPTATION_ANNEXB_NALS
frame_rate 内容帧速率的估计值。此值用于优化;实际帧速率由传入数据的速率决定。指定 0 将分配默认值 24 24
avg_bandwidth_bps 内容带宽的估计值,以 Mbps 为单位。此值用于优化;实际速率由传入数据的带宽决定。例如,对于以 25 运行的 720 p 分辨率视频流FPS,可以预期平均带宽为 5 Mbps。 5
buffer_duration 要在创建者中缓冲的内容的持续时间。如果网络延迟较低,则可以降低此值。如果网络延迟很高,则增加此值可以防止帧在发送之前被丢弃,因为分配无法将帧放入较小的缓冲区。
replay_duration 如果连接中断,视频数据流 “倒带” 的时间量。如果不考虑因连接丢失而导致的帧丢失,则此值可以为零。如果使用该应用程序可以移除冗余帧,则可以增加该值。此值应小于缓冲持续时间,否则使用缓冲持续时间。
connection_staleness 在未收到数据时保持连接的持续时间。
codec_id 内容使用的编解码器。有关更多信息,请参阅 Matroska 规范中的 CodecID V_ MPEG2
track_name 用户定义的音轨名称。 my_track
codecPrivateData 编码器提供的数据,用于对许多下游使用者所需的帧数据(例如,以像素表示的帧宽度和高度)进行解码。在 C++ 制作器库中,中的gMkvTrackVideoBits数组MkvStatics.cpp包括帧的像素宽度和高度。
codecPrivateData大小 codecPrivateData 参数中数据的大小。
track_type 流的轨道的类型。 MKV_ TRACK _ INFO TYPE _ AUDIOMKV_ TRACK _ INFO _ TYPE _ VIDEO
segment_uuid 用户定义的片段 uuid(16 字节)。
default_track_id 轨道的唯一非零编号。 1

直播曲目数据

以下MKV轨道元素由StreamDefinition(在中定义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

帧头元素

以下MKV标题元素由Frame(在KinesisVideoPic包中定义,在mkvgen/Include.h)使用:

  • Frame Index:一个单调递增的值。

  • Flags:帧的类型。有效值包括:

    • FRAME_FLAGS_NONE

    • FRAME_FLAG_KEY_FRAME:如果在流上设置 key_frame_fragmentation,关键帧将启动新的片段。

    • FRAME_FLAG_DISCARDABLE_FRAME:告知解码器可在解码速度较慢时放弃此帧。

    • FRAME_FLAG_INVISIBLE_FRAME:此数据块的持续时间为 0。

  • 解码时间戳:解码此帧的时间戳。如果之前的帧依赖于此帧进行解码,则此时间戳可能早于前一帧的时间戳。该值相对于片段的开头。

  • 演示时间戳:显示此帧的时间戳。该值相对于片段的开头。

  • Duration:帧的播放持续时间。

  • Size:帧数据的大小 (以字节为单位)

MKV帧数据

frame.frameData 中的数据可能仅包含帧的媒体数据,或可能包含进一步嵌套的标头信息,具体取决于使用的编码架构。要在中显示 AWS Management Console,必须使用 H.264 编解码器对数据进行编码,但是 Kinesis Video Streams 可以接收任何格式的时间序列化数据流。