先看一下基本概念:
es流(elementary stream):基本碼流,可以理解為編碼後的裸資料;
ts流(transport stream):傳輸流。固定包長度為188b,ts流固定包長度的好處是便於找到幀的起始位置,易於從包丟失中恢復,適合於有誤碼的環境。所以,基於ts流穩定的特性,傳輸**中進行傳輸的mpeg-2碼流基本上都採用了ts碼流的包格。
概念中已經寫到,ts流固定包長188b。但是我看線上的ts檔案,要大的多。所以我就從網上找了乙個ts檔案,進行了一下解析:
這裡我們看到,檔案大小為1546112個位元組,包含了8224個包, 8224*188=1546112。說明這個檔案是由很多個ts包組成的。
關於ts格式的介紹也有很多,ts開始部分是 4位元組的packet header,後續部分是 packet data。
2.2.1、packet header 資訊說明:
packet 包頭資訊
大小意義
sync_byte
8bits
同步位元組(0x47固定值)
transport_error_indicator
1bit
錯誤指示資訊(1:該包至少有1bits傳輸錯誤)
payload_unit_start_indicator
1bit
負載單元開始標誌(packet不滿188位元組時需填充)
transport_priority
1bit
傳輸優先順序標誌(1:優先順序高)
pid13bits
packet id號碼,唯一的號碼對應不同的包
transport_scrambling_control
2bits
加密標誌(00:未加密;其他表示已加密)
adaptation_field_control
2bits
附加區域控制
continuity_counter
4bits
包遞增計數器
我這裡找乙個ts包來對比一下:
基本和資訊說明中的相符合,這裡留意一下pid,是比較關鍵的字段,pid是ts流中唯一識別標誌,packet data是什麼內容就是由pid決定的。
一些固定的pid:
pid含義
0x0000
pat0x0001
cat0x0002
tsdt
0x0002
eit,st
2.2.2、pat表
pid是當前ts流的packet區別於其他packet型別的唯一識別符。 pat表定義了當前ts流中所有的節目,是根節點,要查尋找節目必須從pat表開始查詢。pat表的pid為 0x0000,這裡找乙個 pat 的 pcaket header 來看一下。
pid:0x0 說明這是乙個pat表,從pat表 的 packet data 中可以獲取pmt表的pid。如果有多個節目,就有多個pid不同的pmt表。
2.2.3、pmt表
pmt表中包含的資料:1、當前頻道中包含的所有video資料的pid
2、當前頻道中包含的所有audio資料的pid
3、和當前頻道關聯在一起的其他資料的pid(如數字廣播,資料通訊等使用的pid)
上圖為乙個pmt的header資訊。
從pmt表中,我們可以獲取頻道中的pid資訊。我們只需要把需要收看的節目的pid儲存起來,對packet進行過濾即可實現。
TS流格式詳解
一 背景介紹 之前我做了乙個專案,要求寫乙個ts流解析的模組,因此看了isoiec 13818 1文件,外加很多人的部落格來幫助理解,來了解ts流格式是個什麼東西,收貨頗多。因此我覺得是時候發點乾貨回饋社會了。二,ts流背景介紹 三,pat和pmt pat,pmt,data,data,pat,pmt...
TS流格式小白入門解讀
一 背景介紹 之前我做了乙個專案,要求寫乙個ts流解析的模組,因此看了isoiec 13818 1文件,外加很多人的部落格來幫助理解,來了解ts流格式是個什麼東西,收貨頗多。因此我覺得是時候發點乾貨回饋社會了。二,ts流背景介紹 三,pat和pmt pat,pmt,data,data,pat,pmt...
vue ts ts環境搭建及ts格式寫法
1 搭建環境 方式一 vue ui手動配置 新增專案 手動配置 新增babel typescript 使用配置檔案,其他選擇自定義 選擇css預處理器和eslint 方式二 vue create 專案名建立 選擇手動配置,可新增typescript 空格新增,回車下一步 方式三 手動建立 2 編寫v...