Kinesis Video Streams 数据模型 - Amazon Kinesis Video Streams
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

Kinesis Video Streams 数据模型

创建者库视频流解析器库 以某种格式发送和接收视频数据,此格式支持随视频数据一起嵌入信息。此格式基于 Matroska (MKV) 规范。

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

Kinesis 视频直播制作人库使用StreamDefinitionFrame类型生成 MKV 流标头、帧标题和帧数据。

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

以下几节描述了由 C++ 创建者库 生成的 MKV 格式数据的组成部分。

流标头元素

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

元素 描述 典型值
stream_name 与 Kinesis 视频流的名称相对应。 my-stream
retention_period Kinesis Video Streams 保留直播数据的持续时间(以小时为单位)。0为不保留数据的直播指定。 24
tags 用户数据的键-值集合。此数据显示在 Amazon Web Services Management Console中,可由客户端应用程序读取以筛选或获取有关流的信息。
kms_key_id 如果存在,则使用用户定义的Amazon 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 收到数据时发送确认 (ACK)。可使用 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 FPS 运行的 720p 分辨率视频流,您可预计平均带宽为 5 Mbps。 5
buffer_duration 要在创建者中缓冲的内容的持续时间。如果网络延迟较低,则可以降低此值。如果网络延迟很高,则增加此值可以防止帧在发送之前被丢弃,因为分配无法将帧放入较小的缓冲区。
replay_duration 如果连接中断,视频数据流 “倒带” 的时间量。如果不考虑因连接丢失而导致的帧丢失,则此值可以为零。如果使用该应用程序可以移除冗余帧,则可以增加该值。此值应小于缓冲持续时间,否则将使用缓冲持续时间。
connection_staleness 在未收到数据时保持连接的持续时间。
codec_id 内容使用的编解码器。有关更多信息,请参阅 Matroska 规范中的 CodecID V_MPEG2
track_name 用户定义的音轨名称。 my_track
codecPrivateData 编码器提供的数据,用于对许多下游使用者所需的帧数据(例如,以像素表示的帧宽度和高度)进行解码。在 C++ 创建者库中,MkvStatics.cpp 中的 gMkvTrackVideoBits 数组包含帧的像素宽度和高度。
codecPrivateData大小 codecPrivateData 参数中数据的大小。
track_type 流的轨道的类型。 MKV_TRACK_INFO_TYPE_AUDIOMKV_TRACK_INFO_TYPE_VIDEO
segment_uuid 用户定义的片段 uuid(16 字节)。
default_track_id 轨道的唯一非零编号。 1

流式传输曲目数据

StreamDefinition 使用以下 MKV 轨道元素(在 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

帧头元素

Frame (在 mkvgen/Include.h 中的 KinesisVideoPic 程序包中定义) 将使用以下 MKV 标头:

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