手表商城網(wǎng)站建設方案太原百度關鍵詞排名
注:本文有部分內(nèi)容引用了維基百科:https://zh.wikipedia.org/wiki/MPEG2-TS
一、引言
本文對MPEG2-TS格式的TS Header進行簡介。
進行簡介之前,請各位先下載MPEG2-TS的官方文檔。ITU-T和ISO/IEC都分別提供MPEG2-TS的官方文檔。但是ITU提供的文檔是免費的,ISO/IEC是付費的,所以我們主要閱讀ITU提供的官方文檔,比如較新版的《T-REC-H.222.0-202106-S!!PDF-E.pdf》。
《T-REC-H.222.0-202106-S!!PDF-E.pdf》總共有340頁。本文下面所說的“頁數(shù)”是指在pdf閱讀器中顯示的頁數(shù):
二、MPEG2-TS官方文檔中的Mnemonics
《T-REC-H.222.0-202106-S!!PDF-E.pdf》第35到36頁定義了Mnemonics(助記符),描述編碼位流中使用的不同數(shù)據(jù)類型,即描述了MPEG2-TS格式中的每個屬性分別占用多少空間:
其中:
bslbf(bit string,left bit first)表示比特串,左位在先。
uimsbf(unsigned integer,most significant bit first)表示無符號整數(shù),高位在先。具體可以參考:《uimsbf和 bslbf的含義》。
三、transport stream
根據(jù)《T-REC-H.222.0-202106-S!!PDF-E.pdf》第3頁,MPEG2-TS官方文檔中把MPEG2-TS傳輸流稱為transport stream。所以MPEG2-TS傳輸流、transport stream、MPEG transport stream是同一個東西,只是叫法不同:
四、transport packet
根據(jù)《T-REC-H.222.0-202106-S!!PDF-E.pdf》第48頁,MPEG transport stream由一個個transport packet組成,使用sync_byte(Syncword,同步字節(jié))分割各個transport packet(又稱為TS包,TS分組、傳輸流報文)。transport packet長度固定為188字節(jié):
雖然官方文檔寫著transport packet長度固定為188字節(jié),但其底層傳輸機制可以為每個transport packet附加一些信息以便傳輸,例如前向糾錯用的校驗部分。DVB和ISDB數(shù)字電視制式的前向糾錯信息有16個字節(jié),而ATSC制式有20個字節(jié),也就是說,如果存在錯誤校驗,比如CRC校驗時,一個transport packet為204字節(jié)(在188字節(jié)的Packet后部加上16字節(jié)的錯誤校驗數(shù)據(jù),188 + 16 = 204)。關于TS流包長的判斷方法可以參考:《TS流包長的簡單判斷(188/204B)》。
五、TS Header
根據(jù)《T-REC-H.222.0-202106-S!!PDF-E.pdf》第280頁,一個transport packet = Header(TS Header) +?Payload(載荷):
根據(jù)《T-REC-H.222.0-202106-S!!PDF-E.pdf》第48頁,一個transport packet包含下圖中所示部分。其中:sync_byte、transport_error_indicator、payload_unit_start_indicator、transport_priority、PID、transport_scrambling_control、adaptation_field_control、continuity_counter這些屬性是每個transport packet都會包含的,所以一般把它們稱作TS Header中的固定長度部分(或必選頭)。除了固定長度部分,TS Header中還有可能包含可選部分,可選部分中包括adaptation_field(適配域),適配域有可選的擴展部分。
所以,TS Header =?固定長度部分(sync_byte、transport_error_indicator、payload_unit_start_indicator、transport_priority、PID、transport_scrambling_control、adaptation_field_control、continuity_counter) +?adaptation_field(適配域):
TS Header中的固定長度部分總共占4個字節(jié)。因為sync_byte占8位(8位等于1個字節(jié))、transport_error_indicator占1位、payload_unit_start_indicator占1位、transport_priority占1位、PID占13位、transport_scrambling_control占2位、adaptation_field_control占2位、continuity_counter占4位,這些屬性加起來總共4個字節(jié)。
其中:
sync_byte:占8位,為同步字節(jié)。每個transport packet以固定的同步字節(jié)起始,這個同步字節(jié)的值必須為0x47:
transport_error_indicator:占1位,為傳輸錯誤指示位。發(fā)送時(調制前)值為0。接收方的解調器(demodulator)在無法成功解調(即使有前向糾錯機制)transport packet內(nèi)容時,將該位設置為1,表示該transport packet損壞:
payload_unit_start_indicator:占1位,為載荷單元開始指示位。負載單元起始標示符,一個完整的數(shù)據(jù)包開始時標記為1, 表示攜帶的是PSI或PES第一個包:
transport_priority:占1位,為傳輸優(yōu)先級。值為1時,在相同PID的分組中具有更高的優(yōu)先權:
PID:占13位,為分組ID。用于識別transport packet的ID。一個PID對應一種特定的PSI消息或者一個特定的PES:
transport_scrambling_control:占2位,傳輸加擾控制。
值為'00'時表示載荷未加密。其余值由具體系統(tǒng)定義。以DVB的CSA和ATSC的DCS為例:
'01' = 保留 (供未來使用),
'10' = 以偶數(shù)密鑰加密
'11' = 以奇數(shù)密鑰加密
adaptation_field_control:占2位,為適配域存在標志。
'00' = 保留 (供未來使用)
'01' = 無適配域,僅有載荷
'10' = 僅有適配域
'11' = 適配域和載荷都存在
continuity_counter:占4位,連續(xù)性計數(shù)器。取值為0x00到0x0F,循環(huán)。用于檢查同一個PID的transport packet的連續(xù)性。每當一個transport packet中包含載荷時,該計數(shù)器加1: