本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Kinesis Video Streams 資料模型
上傳至 Kinesis Video Streams 和 使用剖析器程式庫觀察攝影機的輸出 會以可支援嵌入資訊搭配影片資料的格式來傳送和接收影片資料。此格式以 Matroska (MKV) 規格為基礎。
MKV 格式
上傳至 Kinesis Video Streams 使用 MKV StreamDefinition
和 Frame
類型來產生串流標頭、影格標頭和影格資料。
如需完整MKV規格的資訊,請參閱 Matroska 規格
下列各節說明 產生的 MKV格式化資料的元件C++。
串流標頭元素
StreamDefinition
(在 中定義StreamDefinition.h
) 使用下列MKV標頭元素。
Element | 描述 | 典型值 |
---|---|---|
stream_name | 對應至 Kinesis 影片串流的名稱。 | my-stream |
retention_period | Kinesis Video Streams 會保留該串流資料的持續時間,以小時為單位。0 為未保留資料的串流指定 。 |
24 |
tags | 使用者資料的金鑰值集合。此資料會顯示在 AWS Management Console 且可透過用戶端應用程式讀取來篩選或取得串流的相關資訊。 | |
kms_key_id | 如果存在,使用者定義的 AWS KMS 金鑰會用來加密串流上的資料。如果不存在,資料會由 Kinesis 提供的金鑰 () 加密aws/kinesisvideo 。 |
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 收到資料時會傳送確認 (ACKs)。您可以使用 KinesisVideoStreamFragmentAck 或 回KinesisVideoStreamParseFragmentAck 呼來ACKs接收 。 |
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 執行的 720 p 解析度影片串流FPS,您可以預期平均頻寬為 5 Mbps。 | 5 |
buffer_duration | 內容在生產者上緩衝的持續時間。如果網路延遲低,可以降低此值。如果網路延遲很高,增加此值可防止影格在傳送之前遭到捨棄,因為配置無法將影格放入較小的緩衝區。 | |
replay_duration | 如果連線中斷,影片資料串流「復原」的時間量。如果因為連線遺失而導致影格遺失,則此值可以是零。如果耗用的應用程式可以移除備援影格,則可以增加該值。此值應小於緩衝持續時間,否則會使用緩衝持續時間。 | |
connection_staleness | 沒有接收到任何資料時,連線的維護持續時間。 | |
codec_id | 內容使用的轉碼器。如需詳細資訊,請參閱 Matroska 規格中的 CodecID |
V_MPEG2 |
track_name | 使用者定義的追蹤名稱。 | my_track |
codecPrivateData | 編碼器提供用於解碼影格資料的資料 (例如影格寬度和高度 (以像素為單位)),許多下游消費者會需要此資料。在 C++ 生產者程式庫中, 中的gMkvTrackVideoBits 陣列MkvStatics.cpp 包含影格的像素寬度和高度。 |
|
codecPrivateData大小 | codecPrivateData 參數中的資料大小。 |
|
track_type | 串流的軌道類型。 | MKV_TRACK_INFOTYPE_ AUDIO或 MKV_TRACK_INFO_TYPE_VIDEO |
segment_uuid | 使用者定義的區段 uuid (16 個位元組)。 | |
default_track_id | 軌道的唯一非零編號。 | 1 |
串流追蹤資料
StreamDefinition
(在 中定義StreamDefinition.h
) 會使用下列MKV軌跡元素。
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
(在 KinesisVideoPic
套件中定義,在 中定義mkvgen/Include.h
):
-
影格索引:單調增加的值。
-
旗標:影格的類型。有效值包括以下項目:
-
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