TS格式詳解

2021-09-30 20:05:57 字數 2049 閱讀 1682

先看一下基本概念:

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...