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

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

制作者 SDK 结构

本节包含有关可用于向 Kinesis Video Streams Producer 对象提供数据的结构的信息。

DeviceInfo/DefaultDeviceInfoProvider

这个DeviceInfoDefaultDeviceInfoProvider对象控制 Kinesis Video Streams Producer 对象的行为。

成员字段

  • 版本— 一个整数值,用于确保在当前版本的代码库中使用正确的结构版本。当前版本使用 DEVICE_INFO_CURRENT_VERSION 宏指定。

  • 名称— 设备的人类可读名称。

  • 标签数量/标签— 目前未使用。

  • 直播次数— 设备可以处理的最大流量。这会为最初指向流对象的指针预分配存储,但实际流对象将稍后创建。默认值为 16 个流,但可在 DefaultDeviceInfoProvider.cpp 文件中更改此数字。

  • storageInfo:描述主存储配置的对象。有关更多信息,请参阅StorageInfo

StorageInfo

指定 Kinesis 视频流的主存储配置。

默认实施基于低片段快速堆实施,这一实施针对流式处理进行了优化。它使用 MEMALLOC 分配器,可以在指定平台上覆盖。一些平台具有虚拟内存分配,没有物理页分配的支持。由于使用了内存,虚拟页由物理页提供支持。在存储利用不充分时,这会导致整个系统面临内存不足压力。

根据以下公式计算默认存储大小。DefragmentationFactor 应设置为 1.2 (20%)。

Size = NumberOfStreams * AverageFrameSize * FramesPerSecond * BufferDurationInSeconds * DefragmentationFactor

在以下示例中,设备具有音频和视频流。音频流每秒采样 512 次,平均样本 100 字节。视频流每秒 25 帧,平均 10000 字节。每个流的缓冲时长为 3 分钟。

Size = (512 * 100 * (3 * 60) + 25 * 10000 * (3 * 60)) * 1.2 = (9216000 + 45000000) * 1.2 = 65059200 = ~ 66MB.

如果设备有更多可用内存,我们建议您向存储中添加更多内存,以避免出现严重碎片。

验证存储大小是否足以容纳编码复杂度高(当帧大小因高运动而变大时)或带宽较低时,存储大小是否足以容纳所有流的全部缓冲区。如果生产者达到内存压力,它会发出存储溢出压力回调 (StorageOverflowPressureFunc)。但是,当内容存储中没有可用内存时,它会丢弃推送到 Kinesis Video Streams 的帧,并出现错误 (STATUS_STORE_OUT_OF_MEMORY = 0x5200002e)。有关更多信息,请参阅客户端库返回的错误和状态码:如果应用程序确认 (ACK) 不可用或者持久 ACK 延迟,也会出现这种情况。在这种情况下,在先前的帧开始丢失之前,缓冲区已填满 “缓冲持续时间” 容量。

成员字段

  • 版本— 一个整数值,用于确保在当前版本的代码库中使用正确的结构版本。

  • 存储类型— 一个DEVICE_STORAGE_TYPE枚举,用于指定存储的底层支持和实现。目前唯一支持的值是 DEVICE_STORAGE_TYPE_IN_MEM。未来的实施中将支持 DEVICE_STORAGE_TYPE_HYBRID_FILE,指示存储回退到由文件支持的内容存储。

  • 存储大小— 要预分配的存储大小(以字节为单位)。最小分配大小为 10 MB,最大为 10 GB。(在未来实施由文件支持的内容存储时,这会有所更改。)

  • 溢出率— 一个整数值,表示要从直接内存存储类型 (RAM) 分配的存储的百分比,而不是辅助溢出存储(文件存储)。当前未使用。

  • rootDirectory:由文件支持的内容存储所在目录的路径。当前未使用。