本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Kinesis 视频流结构
您可以使用以下结构向 Kinesis 视频流的实例提供数据。
StreamDefinition/StreamInfo
C++ 层中的 StreamDefinition
对象在独立于平台的代码中封装 StreamInfo
对象,并在构造函数中提供一些默认值。
成员字段
字段 | 数据类型 | 描述 | 默认值 |
---|---|---|---|
stream_name | string |
可选的流名称。有关流名称长度的更多信息,请参阅生产者SDK配额。每个流应具有唯一的名称。 | 如果未指定名称,则将随机生成一个名称。 |
retention_period | duration<uint64_t,
ratio<3600>> |
流的保留期,以秒为单位。指定 0 表示不保留。 |
3600 (1 小时) |
tags | const map<string, string>*
|
包含用户信息的键-值对的映射。如果流已有一组标志,则新标志将附加到现有一组标志之后。 | 无标签 |
kms_key_id | string |
这些区域有: AWS KMS 用于加密直播的密钥 ID。有关更多信息,请参阅 Kinesis Video Streams 中的数据保护。 | 默认KMS密钥 (aws/kinesis-video .) |
streaming_type | STREAMING_TYPE 枚举 |
STREAMING_TYPE_REALTIME 是唯一受支持的值。 |
|
content_type | string |
流的内容格式。Kinesis Video Streams 控制台可以播放video/h264 该格式的内容。 |
video/h264 |
max_latency | duration<uint64_t, milli> |
数据流的最大延迟,以毫秒为单位。当缓冲持续时间超过此时间量时,将调用流延迟压力回调(如果指定)。指定 0 表示将不调用流延迟压力回调。 |
milliseconds::zero() |
fragment_duration | duration<uint64_t> |
所需的片段持续时间,以秒为单位。此值与 key_frame_fragmentation 值结合使用。如果此值为false ,Kinesis Video Streams 将在该持续时间过去后在关键帧上生成片段。例如,高级音频编码 (AAC) 音频流将每帧作为关键帧。指定 key_frame_fragmentation = false 将导致在经过此持续时间之后,在关键帧上片段化,生成 2 秒的片段。 |
2 |
timecode_scale | duration<uint64_t, milli> |
以毫秒为单位MKV的时间码比例,它指定集群内帧的时间码粒度。MKVMKV帧时间码始终相对于集群的起始时间。MKV使用带符号的 16 位值 (0-32767) 来表示集群(片段)内的时间码。验证帧时间码是否可以用给定的时间码比例来表示。默认时间码标度值 1 毫秒确保可以表示的最大帧为 32767 ms ~ = 32 秒。这是在亚马逊 Kinesis Video Streams 服务配额指定的最大片段持续时间(10 秒)内。 | 1 |
key_frame_fragmentation | bool |
是否在关键帧上生成片段。如果true ,则每次有关键帧时都会SDK生成片段的开头。如果false ,Kinesis Video Streams fragment_duration 至少会等待,然后在紧随其后的关键帧上生成一个新的片段。 |
true |
frame_timecodes | bool |
是否使用帧时间码或者使用当前时间回调生成时间戳。许多编码器不在帧中生成时间戳。因此,指定false 此参数可确保帧在放入 Kinesis Video Streams 时带有时间戳。 |
true |
absolute_fragment_times | bool |
Kinesis Video Streams MKV 使用作为其底层打包机制。该MKV规范严格规定帧时间码相对于集群(片段)的开头。但集簇时间码可以是绝对的,也可以相对于流的开始时间。如果时间戳是相对的,则PutMedia 服务API调用将使用可选的直播开始时间戳并调整集群时间戳。该服务始终存储片段及其绝对时间戳。 |
true |
fragment_acks | bool |
是否接收应用程序级片段ACKs(确认)。 | true ,这意味着他们SDK会收到ACKs并相应地采取行动。 |
restart_on_error | bool |
是否在出现特定错误时重启。 | true ,这意味着如果出现任何错误,将SDK尝试重新启动直播。 |
recalculate_metrics | bool |
是否重新计算指标。每次调用检索指标都可以重新计算这些指标以获得最新的 “运行” 值,这可能会产生很小的影响。CPU您可能需要在功耗/占用空间极低的设备false 上将其设置为以节省周期。CPU否则,我们不建议使用false 此值。 |
true |
nal_adaptation_flags | uint32_t |
指定网络抽象层单元 (NALU) 适应标志。如果比特流采用 H.264 编码,则可以将其作为原始数据处理或打包进去。NALUs它们要么是附件B,要么是格式。AVCC大多数基本流制作者和使用者(读取编码器和解码器)都使用 Annex-B 格式,因为它具有诸如错误恢复等优点。更高级别的系统使用该AVCC格式,这是MPEG、HLSDASH、等的默认格式。控制台播放使用浏览器MSE(媒体源扩展)来解码和播放使用该AVCC格式的直播。对于 H.264(以及 M JPEG 和 H.265),SDK提供了适应能力。 许多基本流采用以下格式。在此示例中,
对于 H.264,编解码器私有数据 (CPD) 位于SPS(序列参数集)和PPS(图片参数集)参数中,并且可以根据格式进行调整。AVCC除非媒体管道CPD单独给出,否则应用程序可以CPD从帧中提取。它可以通过查找第一IDR帧(其中应包含SPS和PPS),提取两帧NALUs(它们是 有关更多信息,请参阅 网络抽象层 (NAL) 适应标志参考。 |
默认情况下,将Annex-B格式调整为帧数据和编解码器私有数据的AVCC格式。 |
frame_rate | uint32_t |
预期的帧率。此值用于更好地计算缓冲需求。 | 25 |
avg_bandwidth_bps | uint32_t |
流的预期平均带宽。此值用于更好地计算缓冲需求。 | 4 * 1024 * 1024 |
buffer_duration | duration<uint64_t> |
流缓冲持续时间,以秒为单位。将帧SDK保留在内容存储中的时间最长buffer_duration ,之后随着窗口向前移动,之前的帧将被丢弃。如果被丢弃的帧尚未发送到后端,则会调用丢弃的帧回调。如果当前缓冲区持续时间大于 max_latency ,则将调用流延迟压力回调。当收到保留ACK的片段时,缓冲区会被修剪到下一个片段的开头。这指示内容已持久保留到云中,因此不再需要在本地设备上存储内容。 |
120 |
replay_duration | duration<uint64_t> |
如果启用了重新启动,则在出错期间向后滚动当前读取器进行重播的持续时间(以秒为单位)。回滚将在缓冲区启动时停止(以防缓冲区刚开始流式传输或ACK已出现持久缓冲区)。回滚将尝试停留在指示片段开始的关键帧上。如果 “导致重启” 的错误并不表示主机已死亡(主机仍处于活动状态且其内部缓冲区中包含帧数据),则回滚将在最后收到ACK的帧处停止。然后,它滚动到下一个关键帧,因为整个片段已经存储在主机内存中。 | 40 |
connection_staleness | duration<uint64_t> |
如果SDK未收到缓冲ACK则调用直播陈旧回调的时间(以秒为单位)。它表示帧是从设备发送的,但后端没有确认它们。这表明在中间跳转时或者负载均衡器上出现了断开的连接。 | 30 |
codec_id | string |
MKV曲目的编解码器 ID。 | V_MPEG4/ISO/AVC |
track_name | string |
MKV曲目名称。 | kinesis_video |
codecPrivateData | unsigned char* |
编解码器私有数据 (CPD) 缓冲区。如果媒体管道在直播开始CPD之前有相关信息,则可以在中进行设置StreamDefinition.codecPrivateData 。此时将复制位,在创建流的调用之后可以重用或释放缓冲区。但是,如果创建流时数据不可用,则可以在KinesisVideoStream.start(cpd) 函数的其中一个重载中对其进行设置。 |
null |
codecPrivateData大小 | uint32_t |
编解码器私有数据缓冲区大小。 | 0 |
ClientMetrics
通过调用来填充ClientMetrics对象getKinesisVideoMetrics
。
成员字段
字段 | 数据类型 | 描述 |
---|---|---|
版本 | UINT32 |
结构的版本,在 CLIENT_METRICS_CURRENT_VERSION 宏中定义。 |
contentStoreSize | UINT64 |
整体内容存储大小,以字节为单位。这是在 DeviceInfo.StorageInfo.storageSize 中指定的值。 |
contentStoreAvailable大小 | UINT64 |
当前可用存储大小(以字节为单位)。 |
contentStoreAllocated大小 | UINT64 |
当前分配的大小。由于内部记账和内存存储的实施,分配大小 + 可用大小应略小于总存储大小。 |
totalContentViews大小 | UINT64 |
所有流的所有内容视图的已分配内存大小。这不计入存储大小。此内存使用 MEMALLOC 宏分配,可以覆盖该值以提供自定义分配器。 |
totalFrameRate | UINT64 |
在所有流上观察到的总帧率。 |
totalTransferRate | UINT64 |
在所有流上观察到的总流速率,以每秒字节数为单位。 |
StreamMetrics
通过调用来填充StreamMetrics对象getKinesisVideoMetrics
。
成员字段
字段 | 数据类型 | 描述 |
---|---|---|
版本 | UINT32 |
结构的版本,在 STREAM_METRICS_CURRENT_VERSION 宏中定义。 |
currentViewDuration | UINT64 |
累积帧的时间长度。在快速联网的情况下,此持续时间要么为零,要么为帧持续时间(在传输帧时)。如果持续时间长于中max_latency 指定的时间StreamDefinition ,则会调用直播延迟回调(如果已指定)。持续时间以 100 ns 为单位指定,这是PIC图层的默认时间单位。 |
overallViewDuration | UINT64 |
整体查看持续时间。如果将直播配置为 “否” ACKs 或 “持久性”,则该值会随着帧放入 Kinesis 视频流而增长,并变为等于buffer_duration 中的。StreamDefinition 启用并接收到持久化内容ACK后,缓冲区会被修剪到下一个关键帧。ACKs这是因为ACK时间戳表示整个片段的开头。持续时间以 100-ns 为单位指定,这是PIC图层的默认时间单位。 |
currentViewSize | UINT64 |
当前缓冲区的大小,以字节为单位。 |
overallViewSize | UINT64 |
整体视图大小,以字节为单位。 |
currentFrameRate | UINT64 |
当前流观察到的帧率。 |
currentTransferRate | UINT64 |
当前流观察到的传输速率,以每秒字节数为单位。 |