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

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

Kinesis Video Streams 資料模型

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

MKV 格式是媒體資料的開放規格。Amazon Kinesis Video Streams 開發人員指南中的所有程式庫和程式碼範例都會以 MKV 格式傳送或接收資料。

上傳至 Kinesis Video Streams 使用 MKV StreamDefinitionFrame類型來產生串流標頭、影格標頭和影格資料。

如需完整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 毫秒。指定 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呼來ACKs接收 。 true
restart_on_error 指出串流應在發生串流錯誤後恢復傳輸。 true
nal_adaptation_flags 指出內容中是否存在 NAL(網路抽象層) 調整或轉碼器私有資料。有效旗標包括 NAL_ADAPTATION_ANNEXB_NALSNAL_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_ AUDIOMKV_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 轉碼器編碼,但 Kinesis Video Streams 可以接收任何格式的時間序列化資料串流。