

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 生產者開發套件結構
<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>
+ **版本** – 整數值，用來確保結構的正確版本與程式碼基底的目前版本搭配使用。目前版本指定使用 `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 影格，平均樣本 10,000 位元組。每個串流有 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)。這也可能發生，如果應用程式無法使用確認 (ACK) 或 ACK 持續延遲。在這種情況下，緩衝區會在前一個影格開始捨棄之前填充至「緩衝持續時間」容量。

### 成員欄位
<a name="producer-reference-structures-producer-storageinfo-fields"></a>
+ **版本** – 整數值，用來確保結構的正確版本與程式碼基底的目前版本搭配使用。
+ **storageType** – `DEVICE_STORAGE_TYPE` 指定儲存體基礎備份和實作的列舉。目前僅支援的值為 `DEVICE_STORAGE_TYPE_IN_MEM`。未來的實作中將支援 `DEVICE_STORAGE_TYPE_HYBRID_FILE`，表示儲存空間退回到檔案支援的內容儲存空間。
+ **storageSize** – 要預先配置的儲存體大小，以位元組為單位。最小配置為 10 MB，最大配置為 10 GB。(這會變更檔案支援內容的存放區的未來實作。)
+ **spillRatio** – 整數值，代表要從直接記憶體儲存類型 (RAM) 配置的儲存體百分比，而不是次要溢位儲存體 （檔案儲存）。目前未使用。
+ **rootDirectory**：檔案支援的內容儲存空間所在目錄的路徑位置。目前未使用。