本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Kinesis 視頻流結構
您可以使用下列結構將資料提供給 Kinesis 視訊串流的執行個體。
StreamDefinition/StreamInfo
StreamDefinition
物件在 C++ 層中包裝 StreamInfo
物件於獨立於平台的代碼中,並提供建構函數中的某些預設值。
成員欄位
欄位 | 資料類型 | 描述 | 預設值 |
---|---|---|---|
stream_name | string |
選用的串流名稱。如需更多關於串流名稱長度的資訊,請參閱生產者SDK配額。每個串流皆應有唯一的名稱。 | 如果未指定名稱,則會產生隨機的名稱。 |
retention_period | duration<uint64_t,
ratio<3600>> |
串流的保留期間以秒為單位。指定 0 代表沒有保留。 |
3600 (一小時) |
tags | const map<string, string>*
|
包含使用者資訊之金鑰值對的對應。如果串流已有一組標籤,則新標籤會附加到現有的一組標籤之後。 | 無標籤 |
kms_key_id | string |
所以此 AWS KMS 用於加密串流的金鑰識別碼。如需詳細資訊,請參閱Kinesis Video Streams 中的資料保護。 | 預設KMS金鑰 (aws/kinesis-video .) |
streaming_type | STREAMING_TYPE 列舉 |
唯一支援的值為 STREAMING_TYPE_REALTIME 。 |
|
content_type | string |
串流的內容格式。Kinesis Video Streams 主控台可以播放video/h264 格式的內容。 |
video/h264 |
max_latency | duration<uint64_t, milli> |
串流的最大延遲,以毫秒為單位。當緩衝持續時間超過此時間量時,會呼叫串流延遲壓力回呼 (如果指定)。指定 0 表示將不呼叫串流延遲壓力回呼。 |
milliseconds::zero() |
fragment_duration | duration<uint64_t> |
您要的片段持續時間,以秒為單位。此值與 key_frame_fragmentation 值結合使用。如果此值為false ,則 Kinesis Video Streams 會在此持續時間過後在關鍵影格上產生片段。例如,「進階音訊編碼」(AAC) 音訊串流會將每個影格作為關鍵影格。指定 key_frame_fragmentation = false 導致在經過此持續時間之後在關鍵影格上片段化,產生 2 秒的片段。 |
2 |
timecode_scale | duration<uint64_t, milli> |
時MKV間碼刻度 (以毫秒為單位),指定叢集內畫面之時間碼的粒度。MKVMKV幀時間碼始終是相對於集群的開始。MKV使用帶符號的 16 位元值 (0-32767) 來表示叢集 (片段) 內的時間碼。確認影格時間碼可以使用指定的時間碼刻度來表示。時間碼規模的預設值 1 毫秒可確保最大的影格,則可以代表 32767 毫秒 ~= 32 秒。這是超過最大持續時間指定片段 Amazon Kinesis Video Streams 服務配額為 10 秒。 | 1 |
key_frame_fragmentation | bool |
是否在關鍵影格上產生片段。如果true ,每次有關鍵幀時都SDK會產生片段的開始。如果false ,Kinesis Video Streams 至少會等待,fragment_duration 並在其後面的關鍵影格上產生一個新片段。 |
true |
frame_timecodes | bool |
是否使用影格時間碼或者使用目前時間回呼產生時間戳記。許多編碼器不會產生時間戳記的影格。因此,false 為此參數指定可確保在將影格放入 Kinesis Video Streams 時的時間戳記。 |
true |
absolute_fragment_times | bool |
Kinesis Video Streams 使用MKV作為其基礎封裝機制。該MKV規範對幀時間碼相對於群集(片段)的開始是嚴格的。不過,在叢集的時間碼可以絕對或相對於串流的開始時間。如果時間戳記是相對的,則PutMedia 服務API呼叫會使用選用的串流開始時間戳記,並調整叢集時間戳記。該服務隨時儲存區段及其絕對時間戳記。 |
true |
fragment_acks | bool |
是否接收應用程序級片段ACKs(確認)。 | true ,這意味著SDK將接收ACKs並採取相應的行動。 |
restart_on_error | bool |
是否在出現特定錯誤時重新啟動。 | true ,表示如果發生任何錯誤,會SDK嘗試重新啟動串流。 |
recalculate_metrics | bool |
是否重新計算指標。每次檢索指標的調用都可以重新計算這些指標以獲取最新的「運行中」值,這可能會產CPU生很小的影響。您可能需要將其設置為false 在極低功率/佔用空間的設備上以節省循環。CPU否則,我們不建議使false 用此值。 |
true |
nal_adaptation_flags | uint32_t |
指定網路抽象層單元 (NALU) 自適應旗標。如果比特流是 H.264 編碼,則可以將其處理為原始或打包在. NALUs 這些都是安涅克斯-B 或AVCC格式。大多數基本流生產者和消費者(讀取編碼器和解碼器)使用 Annex-B 格式,因為它具有諸如錯誤恢復等優點。較高層級的系統會使用AVCC格式,格式是MPEG、HLSDASH、等的預設格式。控制台播放使用瀏覽器的MSE(媒體源擴展)來解碼和播放使用該AVCC格式的流。對於 H.264 (以及適用於 M JPEG 和 H.265),可SDK提供適應功能。 許多基本串流採用以下格式。在此範例中,
在 H.264 的情況下,編解碼器私有數據(CPD)位於SPS(序列參數集)和PPS(圖片參數集)參數中,並且可以根據AVCC格式進行調整。除非媒體管道CPD單獨提供,否則應用程序可以CPD從框架中提取。它可以通過查找第一IDR幀(應包含SPS和PPS),提取兩個NALUs(這是 如需詳細資訊,請參閱網絡抽象層(NAL)適應標誌參考。 |
預設值是將 Annex-B 格式調整為影AVCC格資料和編解碼器私人資料的格式。 |
frame_rate | uint32_t |
預期的影格率。此值用於更完善計算緩衝需求。 | 25 |
avg_bandwidth_bps | uint32_t |
串流的預期平均頻寬。此值用於更完善計算緩衝需求。 | 4 * 1024 * 1024 |
buffer_duration | duration<uint64_t> |
串流緩衝持續時間,以秒為單位。會將內容存放區中的框架SDK保持為最多buffer_duration ,之後當視窗向前移動時,先前的框架會被放置。如果正在刪除的幀尚未發送到後端,則會調用丟棄的幀回調。如果目前緩衝區持續時間大於 max_latency ,則將呼叫延遲壓力回呼。收到持續存ACK在的片段時,緩衝區被修剪到下一個片段開始。這表示其內容的已長期存放在雲端,所以不再需要在執行個體的本機裝置的內容儲存。 |
120 |
replay_duration | duration<uint64_t> |
如果啟用重新啟動,則在發生錯誤期間向後捲動目前讀取器以重播的持續時間 (以秒為單位)。回滾在緩衝區開始時停止(如果它剛剛開始流式傳輸或持久ACK性出現)。轉返嘗試停留在顯示片段開始的關鍵影格上。如果 '導致重新啟動的錯誤不表示無效的主機 (主機仍然存在,並且在其內部緩衝區中包含框架資料),則復原會停止在上次接收的ACK影格。它會將轉發到下一個金鑰影格,因為整個片段已存放在主機記憶體。 | 40 |
connection_staleness | duration<uint64_t> |
以秒為單位的時間,如果SDK沒有收到緩衝,則會呼叫串流失效回呼。ACK它表示幀正在從設備發送,但後端未承認它們。此條件表示在中間躍點或負載平衡器的連線已中斷。 | 30 |
codec_id | string |
MKV音軌的編解碼器 ID。 | V_MPEG4/ISO/AVC |
track_name | string |
MKV曲目名稱。 | kinesis_video |
codecPrivateData | unsigned char* |
編解碼器私人資料 (CPD) 緩衝區。如果媒體管線在串流開始之CPD前具有關於的資訊,則可以在中設定StreamDefinition.codecPrivateData 。此時將複製位元,在建立串流的呼叫之後可以重新使用緩衝區或將其釋放。但是,如果資料在建立串流時無法使用,則可以在KinesisVideoStream.start(cpd) 函數的其中一個重載中設定資料。 |
null |
codecPrivateData大小 | uint32_t |
編解碼器私有資料緩衝區大小。 | 0 |
ClientMetrics
該ClientMetrics對象通過調用填充getKinesisVideoMetrics
。
成員欄位
欄位 | 資料類型 | 描述 |
---|---|---|
version | UINT32 |
結構的版本,在 CLIENT_METRICS_CURRENT_VERSION 巨集中定義。 |
contentStoreSize | UINT64 |
整體內容存放區大小,以位元組為單位。這是 DeviceInfo.StorageInfo.storageSize 中指定的值。 |
contentStoreAvailable大小 | UINT64 |
目前可用的儲存大小 (位元組)。 |
contentStoreAllocated大小 | UINT64 |
目前配置的大小。由於內部記帳和內容存放區的實施,配置加上可用的大小應略小於總儲存空間的大小。 |
totalContentViews大小 | UINT64 |
所有串流的所有內容視圖的已分配記憶體大小。這不會計入儲存空間大小。此記憶體使用 MEMALLOC 巨集分配,可以覆蓋該值以提供自訂分配器。 |
totalFrameRate | UINT64 |
在所有串流上觀察到的總影格率。 |
totalTransferRate | UINT64 |
在所有串流上觀察到的總串流速率,以每秒位元組數為單位。 |
StreamMetrics
該StreamMetrics對象通過調用填充getKinesisVideoMetrics
。
成員欄位
欄位 | 資料類型 | 描述 |
---|---|---|
version | UINT32 |
結構的版本,在 STREAM_METRICS_CURRENT_VERSION 巨集中定義。 |
currentViewDuration | UINT64 |
累積影格的時間長度。在快速聯網的情況下,此持續時間可能是零或幀持續時間(因為幀正在傳輸)。如果持續時間長於中max_latency 指定的StreamDefinition ,則會呼叫串流延遲回呼 (如果已指定)。持續時間以 100 ns 單位指定,這是PIC圖層的預設時間單位。 |
overallViewDuration | UINT64 |
整體檢視持續時間。如果串流設定為沒有ACKs或持續性,則此值會隨著影格放入 Kinesis 視訊串流而增加,並且等於buffer_duration 中的StreamDefinition 。啟用ACKs且接收持續性ACK時,緩衝區會裁剪至下一個關鍵畫面。這是因為時ACK間戳表示整個片段的開始。持續時間以 100-ns 單位指定,這是PIC圖層的預設時間單位。 |
currentViewSize | UINT64 |
目前緩衝區的大小,以位元組為單位。 |
overallViewSize | UINT64 |
整體檢視大小,以位元組為單位。 |
currentFrameRate | UINT64 |
目前串流觀察到的影格率。 |
currentTransferRate | UINT64 |
目前串流觀察到的傳輸速率,以每秒位元組數為單位。 |