本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Kinesis Video Streams 数据模型
上传到 Kinesis Video Streams 和 使用解析器库观看摄像机的输出 以某种格式发送和接收视频数据,此格式支持随视频数据一起嵌入信息。此格式基于 Matroska (MKV) 规范。
该MKV格式
上传到 Kinesis Video Streams使用StreamDefinition
和Frame
类型生成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 毫秒。指定 有关更多信息,请参阅 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可以使用KinesisVideoStreamFragmentAck 或KinesisVideoStreamParseFragmentAck 回调接收。 |
true |
restart_on_error | 指示在发生流错误后是否应继续传输流。 | true |
nal_adaptation_flags | 表示内容中是否存在NAL(网络抽象层)自适应数据或编解码器私有数据。有效标记包括 NAL_ADAPTATION_ANNEXB_NALS 和 NAL_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 _ AUDIO 或 MKV_ 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