本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
生产者SDK结构
本节包含有关可用于向 Kinesis Video Streams Producer 对象提供数据的结构的信息。
DeviceInfo/DefaultDeviceInfoProvider
DeviceInfo和DefaultDeviceInfoProvider对象控制 Kinesis Video Streams Producer 对象的行为。
成员字段
-
version-一个整数值,用于确保在当前版本的代码库中使用正确的结构版本。当前版本使用
DEVICE_INFO_CURRENT_VERSION
宏指定。 -
name — 设备的人类可读名称。
-
tagCount/tags — 当前未使用。
-
streamCount— 设备可以处理的最大流量。这会为最初指向流对象的指针预分配存储,但实际流对象将稍后创建。默认值为 16 个流,但可在
DefaultDeviceInfoProvider.cpp
文件中更改此数字。 -
storageInfo:描述主存储配置的对象。有关更多信息,请参阅 StorageInfo。
StorageInfo
指定 Kinesis Video Streams 的主存储配置。
默认实施基于低片段快速堆实施,这一实施针对流式处理进行了优化。它使用 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
()。有关更多信息,请参阅 客户端库返回的错误和状态码。如果应用程序确认 (ACKs) 不可用,或者持久化延ACKs迟,也可能发生这种情况。在这种情况下,在前一帧开始丢失之前,缓冲区将填充到 “缓冲持续时间” 容量。
成员字段
-
version-一个整数值,用于确保在当前版本的代码库中使用正确的结构版本。
-
storageType— 一个
DEVICE_STORAGE_TYPE
枚举,它指定存储的底层支持和实现。目前唯一支持的值是DEVICE_STORAGE_TYPE_IN_MEM
。未来的实施中将支持DEVICE_STORAGE_TYPE_HYBRID_FILE
,指示存储回退到由文件支持的内容存储。 -
storageSize— 要预分配的存储大小(以字节为单位)。最小分配大小为 10 MB,最大为 10 GB。(在未来实施由文件支持的内容存储时,这会有所更改。)
-
spillRatio— 一个整数值,表示要从直接内存存储类型 (RAM) 中分配的存储空间的百分比,而不是从二级溢出存储(文件存储)中分配的存储空间的百分比。当前未使用。
-
rootDirectory:文件支持的内容存储所在目录的路径。当前未使用。