View a markdown version of this page

Kinesis Video Streams 資料模型 - Amazon Kinesis Video Streams

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Kinesis Video Streams 資料模型

上傳至 Kinesis Video Streams 和 使用剖析器程式庫監看攝影機的輸出 會以可支援嵌入資訊搭配影片資料的格式來傳送和接收影片資料。此格式取決於 Matroska (MKV) 規格。

MKV 格式是適用於媒體資料的開放規格。Amazon Kinesis Video Streams 開發人員指南中的所有程式庫和程式碼範例會以 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 毫秒。指定 0 也會指派 1 毫秒的預設值。這個值可以介於 100 奈秒和 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 轉碼器編碼,但 Kinesis Video Streams 可以接收任何格式的時間序列化資料串流。