本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
生產者SDK結構
本節包含可用來提供資料給 Kinesis Video Streams 製作者物件之結構的相關資訊。
DeviceInfo/DefaultDeviceInfoProvider
DeviceInfo和DefaultDeviceInfoProvider物件控制 Kinesis Video Streams 製作者物件的行為。
成員欄位
-
version — 整數值,用來確定結構的正確版本與目前版本的程式碼基底搭配使用。目前版本指定使用
DEVICE_INFO_CURRENT_VERSION
巨集。 -
name — 裝置的人類可讀名稱。
-
tagCount/標籤 — 目前未使用。
-
streamCount— 設備可以處理的最大流數量。這將為最初指向串流物件的指標預先分配儲存空間,但實際串流物件會隨後建立。預設值為 16 的串流,但您可於檔案中更改
DefaultDeviceInfoProvider.cpp
此編號。 -
storageInfo:描述主要儲存裝置組態的物件。如需詳細資訊,請參閱StorageInfo。
StorageInfo
指定 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
)。如需詳細資訊,請參閱用戶端程式庫傳回的錯誤和狀態碼。如果應用程序確認/確認(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:檔案型內容存放區所在目錄的路徑。目前未使用。