本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Kinesis Video Streams 資料模型
Producer 資料庫 和 串流剖析器程式庫 會以可支援嵌入資訊搭配影片資料的格式來傳送和接收影片資料。此格式取決於 Matroska (MKV) 規格。
MKV 格式
室壁運動視頻流生產者庫使用StreamDefinition
和Frame
類型來生成 MKV 流標題,幀標題和幀數據。
如需完整 MKV 規格的詳細資訊,請參閱 Matroska 規格
下列各節說明 C++ Producer Library 產生的 MKV 格式化之資料的元件。
流頭元素
以下 MKV 標頭元素會由 StreamDefinition
所使用 (在 StreamDefinition.h
中加以定義)。
Element | 描述 | 典型值 |
---|---|---|
stream_name | 對應至 Kinesis 視訊串流的名稱。 | my-stream |
retention_period | Kinesis 影片串流會保留串流資料的持續時間 (以小時為單位)。指0 定不保留資料的串流。 |
24 |
tags | 使用者資料的金鑰值集合。此資料會顯示在 AWS Management Console 且可透過用戶端應用程式讀取來篩選或取得串流的相關資訊。 | |
kms_key_id | 如果存在,則使用者定義AWS KMS金鑰來加密串流上的資料。如果不存在,則會使用 Kineis 提供的金鑰 () 加密資料。aws/kinesis-video |
01234567-89ab-cdef-0123-456789ab |
streaming_type | 目前唯一有效串流類型為:STREAMING_TYPE_REALTIME 。 |
STREAMING_TYPE_REALTIME |
content_type | 使用者定義的內容類型。對於要在主控台中播放的串流影片資料,內容類型必須是 video/h264 。 |
影片/h264 |
max_latency | 此值目前未使用,應該設定為 0。 | 0 |
fragment_duration | 片段應持續多久的預估值,此值會用於優佳化。實際片段持續時間取決於串流資料。 | 2 |
timecode_scale | 表示影格時間戳記使用的比例。預設設定為 1 毫秒。指定 如需詳細資訊,請參閱 Matroska 文件TimecodeScale |
|
key_frame_fragmentation | 若為 true ,在收到關鍵影格時,串流即會啟動新叢集。 |
true |
frame_timecodes | 如果true ,Kinesis Video Streams 會使用簡報時間戳記 (pts) 和解碼接收影格的時間戳記 (dts) 值。如果false ,Kinesis Video Streams 在收到影格時會使用系統產生的時間值加上戳記。 |
true |
absolute_fragment_time | 若是 true ,會將叢集時間碼解譯為使用絕對時間 (例如,透過生產者的系統時鐘)。若是 false ,會將叢集時間碼解譯為串流的相對開始時間。 |
true |
fragment_acks | 如果是true ,則會在 Kinesis Video Streams 收到資料時傳送確認 (ACK)。您可以使用 KinesisVideoStreamFragmentAck 或 KinesisVideoStreamParseFragmentAck 回呼來接收 ACK。 |
true |
restart_on_error | 指出串流應在發生串流錯誤後恢復傳輸。 | true |
nal_adaptation_flags | 指出 NAL (網路抽象層) 適應性或轉碼器私有資料在內容中是否存在。有效旗標包括 NAL_ADAPTATION_ANNEXB_NALS 與 NAL_ADAPTATION_ANNEXB_CPD_NALS 。 |
NAL_ADAPTATION_ANNEXB_NALS |
frame_rate | 內容影格率的預計值。這個值是用於最佳化;實際影格率取決於傳入資料的速率。指定 0 會指派預設值 24 。 |
24 |
avg_bandwidth_bps | 內容頻寬的估計值,以 Mbps 為單位。這個值是用於最佳化;實際速率取決於傳入資料的頻寬。例如,對於執行 25 FPS 的 720 p 解析度影片串流,您可以預期平均頻寬為 5 Mbps。 | 5 |
buffer_duration | 內容在生產者上緩衝的持續時間。如果網絡延遲很低,則可以減少此值。如果網路延遲很高,則增加此值可防止因配置無法將框架放入較小的緩衝區而導致訊框在傳送之前丟棄。 | |
replay_duration | 如果連線中斷,視訊資料串流會「倒回」的時間長度。如果不擔心連線中斷而遺失影格,則此值可以為零。如果消耗的應用程式可以移除多餘的框架,則該值可以增加。此值應小於緩衝區持續時間,否則會使用緩衝區持續時間。 | |
connection_staleness | 沒有接收到任何資料時,連線的維護持續時間。 | |
codec_id | 內容使用的轉碼器。如需詳細資訊,請參閱 Matroska 規格中的 CodecID |
V_MPEG2 |
track_name | 使用者定義的追蹤名稱。 | my_track |
codecPrivateData | 編碼器提供用於解碼影格資料的資料 (例如影格寬度和高度 (以像素為單位)),許多下游消費者會需要此資料。在 C++ Producer Library 中,MkvStatics.cpp 中的 gMkvTrackVideoBits 陣列會 包含影格的像素寬度與高度。 |
|
codecPrivateData大小 | codecPrivateData 參數中的資料大小。 |
|
track_type | 串流的軌道類型。 | MKV_TRACK_INFO_TYPE_AUDIO 或 MKV_TRACK_INFO_TYPE_VIDEO |
segment_uuid | 使用者定義的區段 uuid (16 個位元組)。 | |
default_track_id | 軌道的唯一非零編號。 | 1 |
串流軌跡資料
以下 MKV 軌道元素會由 StreamDefinition
所使用 (在 StreamDefinition.h
中加以定義)。
Element | 描述 | 典型值 |
---|---|---|
track_name | 使用者定義的軌道名稱。例如,「音訊」代表音軌。 | 音訊 |
codec_id | 軌道的轉碼器 ID。例如,「A_AAC」代表音軌。 | A_AAC |
cpd | 編碼器用於解碼影格資料所提供的資料。此資料可以包含影格寬度和高度 (以像素為單位),許多下游消費者都需要此資訊。在 C ++ 生產者庫中, MkvStatics.cpp 中的 gMkvTrackVideoBits 數組包含框架的像素寬度和高度。 | |
cpd_size | codecPrivateData 參數中資料的大小。 | |
track_type | 軌道的類型。例如,您可以針對音訊使用 MKV_TRACK_INFO_TYPE_AUDIO 的列舉值。 | MKV_TRACK_INFO_TYPE_AUDIO |
框架標題元素
以下 MKV 標頭元素會由 Frame
所使用 (在 mkvgen/Include.h
中的 KinesisVideoPic
套件中加以定義)。
-
影格索引:單調增加的值。
-
旗標:影格的類型。有效值包括以下項目:
-
FRAME_FLAGS_NONE
-
FRAME_FLAG_KEY_FRAME
:如果key_frame_fragmentation
是在串流上設定,關鍵影格會開始新的片段。 -
FRAME_FLAG_DISCARDABLE_FRAME
:告知解碼器,當解碼速度太慢時,其可以放棄此影格。 -
FRAME_FLAG_INVISIBLE_FRAME
:此區塊的持續時間為 0。
-
-
解碼時間戳記:解碼此影格的時間戳記。如果先前的影格依賴此影格進行解碼,則此時間戳記可能會比較早前影格的時間戳記。這個值相對於該片段的開始。
-
簡報時間戳記:顯示此影格的時間戳記。這個值相對於該片段的開始。
-
持續時間:影格播放的持續時間。
-
大小:影格資料大小 (以位元組為單位)
MKV 幀數據
frame.frameData
中的資料可能僅包含影格的媒體資料,也可能包含進一步巢狀標頭資訊 (根據所使用之編碼的結構描述而定)。若要顯示在中AWS Management Console,資料必須以 H.264