一、背景介紹
之前我做了乙個專案,要求寫乙個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流的時候至關重要,新手可能比較困惑,不懂其意,我得好好講講。
六、解析程式
傳送門:
七、pts dts pcr單位
pts:顯示時間戳,單位是毫秒*90
dts:解碼時間戳,單位是毫秒*90
TS流格式詳解
一 背景介紹 之前我做了乙個專案,要求寫乙個ts流解析的模組,因此看了isoiec 13818 1文件,外加很多人的部落格來幫助理解,來了解ts流格式是個什麼東西,收貨頗多。因此我覺得是時候發點乾貨回饋社會了。二,ts流背景介紹 三,pat和pmt pat,pmt,data,data,pat,pmt...
TS格式詳解
先看一下基本概念 es流 elementary stream 基本碼流,可以理解為編碼後的裸資料 ts流 transport stream 傳輸流。固定包長度為188b,ts流固定包長度的好處是便於找到幀的起始位置,易於從包丟失中恢復,適合於有誤碼的環境。所以,基於ts流穩定的特性,傳輸 中進行傳輸...
TS流相關知識
據傳輸 的質量不同,mpeg 2中定義了兩種復合資訊流 傳送流 ts transportstream 和節目流 ps programstream ts流與ps流的區別在於ts流的包結構是固定長度的,而ps流的包結構是可變長度的。ps包與ts包在結構上的這種差異,導致了它們對傳輸誤碼具有不同的抵抗能力...