TS流格式詳解

2021-08-28 12:32:13 字數 1179 閱讀 3860

一、背景介紹

之前我做了乙個專案,要求寫乙個ts流解析的模組,因此看了isoiec 13818-1文件,外加很多人的部落格來幫助理解,來了解ts流格式是個什麼東西,收貨頗多。因此我覺得是時候發點乾貨回饋社會了。

二,ts流背景介紹

三,pat和pmt

pat,pmt,data,data,,,,,,pat,pmt,data,data,,,,,,

那麼你可能要問了,有了這2張**怎麼區分頻道,節目呢?pat**裡面包含所有pmt**的資訊,乙個pmt**對應乙個頻道,比如**電視台綜合頻道。而乙個pmt裡面包含所有節目的資訊,比如cctv1~cctv14。在實際情況中我們是有很多頻道的,所以pmt**可不止一張,有可能是pat,pmt,pmt,pmt,,,data,data,,,,pat,pmt,pmt,,,data,data這樣的形式。除了這個設定外,每個頻道或節目都有自己的識別符號(pid),這樣當我們拿到乙個data,解析出裡面的pid,就知道是什麼節目,並且也知道所屬頻道是什麼了。我們看電視的時候,會收到所有節目的data,當我們正在看某個節目的時候,機頂盒會把這個節目的data單獨過濾出來,其它的捨棄。

四,ts packet格式講解

ts packet我們知道一包是188位元組,它分為ts header和ts body。其中ts header裡面會有個pid欄位標識著當前ts body的型別。ts body有可能是**,也有可能是data,**沒什麼好說的,我們說下data的結構。data包

第乙個ts packet:ts header+pes頭+部分es

第二個ts packet:ts header+部分es

最後乙個ts packet:ts header+填充位元組+部分es

pes頭加上這些部分es,就是乙個pes包。

五,具體字段解析

具體欄位請參考isoiec 13818-1.pdf文件,看起來應該沒什麼困難,這裡不再累述。

傳送門:

但是其中ts header裡的payload_unit_start_indicator和pes header裡的pes_packet_length這兩個字段,在解析ts流的時候至關重要,新手可能比較困惑,不懂其意,我得好好講講。

六、解析程式

TS格式詳解

先看一下基本概念 es流 elementary stream 基本碼流,可以理解為編碼後的裸資料 ts流 transport stream 傳輸流。固定包長度為188b,ts流固定包長度的好處是便於找到幀的起始位置,易於從包丟失中恢復,適合於有誤碼的環境。所以,基於ts流穩定的特性,傳輸 中進行傳輸...

TS流格式小白入門解讀

一 背景介紹 之前我做了乙個專案,要求寫乙個ts流解析的模組,因此看了isoiec 13818 1文件,外加很多人的部落格來幫助理解,來了解ts流格式是個什麼東西,收貨頗多。因此我覺得是時候發點乾貨回饋社會了。二,ts流背景介紹 三,pat和pmt pat,pmt,data,data,pat,pmt...

TS流相關知識

據傳輸 的質量不同,mpeg 2中定義了兩種復合資訊流 傳送流 ts transportstream 和節目流 ps programstream ts流與ps流的區別在於ts流的包結構是固定長度的,而ps流的包結構是可變長度的。ps包與ts包在結構上的這種差異,導致了它們對傳輸誤碼具有不同的抵抗能力...