本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Kinesis Video Streams 資料模型
上傳至 Kinesis Video Streams 和 使用剖析器程式庫監看攝影機的輸出 會以可支援嵌入資訊搭配影片資料的格式來傳送和接收影片資料。此格式取決於 Matroska (MKV) 規格。
MKV 格式
上傳至 Kinesis Video Streams 使用 StreamDefinition和 Frame類型來產生 MKV 串流標頭、影格標頭和影格資料。
如需完整 MKV 規格的詳細資訊,請參閱 Matroska 規格
下列各節說明 C++ 產生的 MKV 格式化之資料的元件。
串流標頭元素
以下 MKV 標頭元素會由 StreamDefinition 所使用 (在 StreamDefinition.h 中加以定義)。
| Element | 描述 | 典型值 |
|---|---|---|
| stream_name | 對應至 Kinesis 影片串流的名稱。 | my-stream |
| retention_period | Kinesis Video Streams 會保留該串流資料的持續時間,以小時為單位。0 為不保留資料的串流指定 。 |
24 |
| tags | 使用者資料的金鑰值集合。此資料會顯示在 AWS 管理主控台 且可透過用戶端應用程式讀取來篩選或取得串流的相關資訊。 | |
| 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 回呼來接收 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++ 生產者程式庫中, 中的gMkvTrackVideoBits陣列MkvStatics.cpp包含影格的像素寬度和高度。 |
|
| codecPrivateDataSize | 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 陣列包含影格的像素寬度和高度。 MkvStatics.cpp | |
| 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 管理主控台,資料必須以 H.264