

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

# 制作人 SDK 结构
<a name="producer-reference-structures-producer"></a>

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

**Topics**
+ [DeviceInfo/DefaultDeviceInfoProvider](#producer-reference-structures-producer-deviceinfo)
+ [StorageInfo](#producer-reference-structures-producer-storageinfo)

## DeviceInfo/DefaultDeviceInfoProvider
<a name="producer-reference-structures-producer-deviceinfo"></a>

**DeviceInfo**和**DefaultDeviceInfoProvider**对象控制 Kinesis Video Streams Producer 对象的行为。

### 成员字段
<a name="producer-reference-structures-producer-deviceinfo-fields"></a>
+ **version**-一个整数值，用于确保在当前版本的代码库中使用正确的结构版本。当前版本使用 `DEVICE_INFO_CURRENT_VERSION` 宏指定。
+ **name** — 设备的人类可读名称。
+ **tagCount/tags** — 当前未使用。
+ **StreamCount** — 设备可以处理的最大直播数量。这会为最初指向流对象的指针预分配存储，但实际流对象将稍后创建。默认值为 16 个流，但可在 `DefaultDeviceInfoProvider.cpp` 文件中更改此数字。
+ **storageInfo**：描述主存储配置的对象。有关更多信息，请参阅 [StorageInfo](#producer-reference-structures-producer-storageinfo)。

## StorageInfo
<a name="producer-reference-structures-producer-storageinfo"></a>

指定 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`（）。有关更多信息，请参阅 [客户端库返回的错误和状态码](producer-sdk-errors.md#producer-sdk-errors-client)。如果应用程序确认 (ACKs) 不可用，或者持久化延 ACKs 迟，也可能发生这种情况。在这种情况下，在前一帧开始丢失之前，缓冲区将填充到 “缓冲持续时间” 容量。

### 成员字段
<a name="producer-reference-structures-producer-storageinfo-fields"></a>
+ **version**-一个整数值，用于确保在当前版本的代码库中使用正确的结构版本。
+ **StorageT** ype — `DEVICE_STORAGE_TYPE` 一个枚举，用于指定存储的底层支持和实现。目前唯一支持的值是 `DEVICE_STORAGE_TYPE_IN_MEM`。未来的实施中将支持 `DEVICE_STORAGE_TYPE_HYBRID_FILE`，指示存储回退到由文件支持的内容存储。
+ **存储大小**-要预分配的存储大小（以字节为单位）。最小分配大小为 10 MB，最大为 10 GB。（在未来实施由文件支持的内容存储时，这会有所更改。）
+ **sp** illRatio — 一个整数值，表示要从直接内存存储类型 (RAM) 与二级溢出存储（文件存储）中分配的存储空间的百分比。当前未使用。
+ **rootDirectory**：由文件支持的内容存储所在目录的路径。当前未使用。