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

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

Kinesis Video Streams 資料模型

Producer 資料庫串流剖析器程式庫 會以可支援嵌入資訊搭配影片資料的格式來傳送和接收影片資料。此格式取決於 Matroska (MKV) 規格。

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

室壁運動視頻流生產者庫使用StreamDefinitionFrame類型來生成 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 毫秒。指定 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 收到資料時傳送確認 (ACK)。您可以使用 KinesisVideoStreamFragmentAckKinesisVideoStreamParseFragmentAck 回呼來接收 ACK。 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 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_AUDIOMKV_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 轉碼器編碼,但 Kinesis Video Streams 可以接收任何格式的時間序列化資料串流。