機頂盒技術學習—TS流

原文轉自:http://blog.csdn.net/zxh821112/article/details/17587215,有增改。

一 從TS流開始

    數字電視機頂盒接收到的是一段段的碼流,我們稱之爲TS(Transport Stream,傳輸流),每個TS流都攜帶一些信息,如Video、Audio以及我們需要學習的PAT、PMT等信息。因此,我們首先需要了解TS流是什麼,以及TS流是怎樣形成、有着怎樣的結構。

    (一) TS流、PS流、PES流和ES流都是什麼?

        ESElementary Stream):基本碼流,不分段的音頻、視頻或其他信息的連續碼流。

        PES:把基本流ES分割成段,並加上相應頭文件打包成形的打包基本碼流。

        PSProgram Stream):節目流,將具有共同時間基準的一個或多個PES組合(複合)而成的單一數據流(用於播放或編輯系統,如m2p)。

        TSTransport Stream):傳輸流,將具有共同時間基準或獨立時間基準的一個或多個PES組合(複合)而成的單一數據流(用於數據傳輸)。

        *NOTE:TS流和PS流的區別:TS流的包結構是長度是固定的;PS流的包結構是可變長度的。這導致了TS流的抵抗傳輸誤碼的能力強於PS流(TS碼流由於採用了固定長度的包結構,當傳輸誤碼破壞了某一TS包的同步信息時,接收機可在固定的位置檢測它後面包中的同步信息,從而恢復同步,避免了信息丟失。而PS包由於長度是變化的,一旦某一 PS包的同步信息丟失,接收機無法確定下一包的同步位置,就會造成失步,導致嚴重的信息丟失。因此,在信道環境較爲惡劣,傳輸誤碼較高時,一般採用TS碼流;而在信道環境較好,傳輸誤碼較低時,一般採用PS碼流。)

       由於TS碼流具有較強的抵抗傳輸誤碼的能力,因此目前在傳輸媒體中進行傳輸的MPEG-2碼流基本上都採用了TS碼流的包格。

     (二) TS流是如何產生的?

Center

        

        從上圖可以看出,視頻ES和音頻ES通過打包器和共同或獨立的系統時間基準形成一個個PES,通過TS複用器複用形成的傳輸流。注意這裏的TS流是位流格式(分析Packet的時候會解釋),也即是說TS流是可以按位讀取的。

 

    (三) TS流的格式是怎樣的?

        TS流是基於Packet的位流格式,TS流涉及到的單位類型有:

        1. 包(Packet)

            每個包是188個字節(或204個字節,在188個字節後加上了16字節的CRC校驗數據,其他格式一樣)。

        2. 段(Section)

            多個包組成一個段,每個段不超過1021個字節。

            根據標準,payload_unit_start_indicator爲1的包是第一個包,後續的包:1. payload_unit_start_indicator均爲0,2. 除去包頭就是與前一個包末尾相銜接的數據。我們從第一個包的section_length判斷是否有多個包存在,從第一個包的last_section_number判斷是否有多個段存在。

             

        整個TS流組成形式如下:

Center

wKioL1fGQaCRV33XAABCSC_wR_k559.png

        PID是TS流中唯一識別標誌,Packet Data是什麼內容就是由PID決定的。如果一個TS流中的一個Packet的Packet Header中的PID是0x0000,那麼這個Packet的Packet Data就是DVB的PAT表而非其他類型數據(如Video、Audio或其他業務信息)。下表給出了一些表的PID值,這些值是固定的,不允許用於更改。

根目錄

PSI/SI(Program Specific Information/Service Information節目特定信息/待補充)

PID值
PAT(Program Association Table, 數字電視節目關聯表)0x0000
- CAT (Conditional  Access Table,  條件接收表)0x0001
- PMT (Program Map Table, 節目映射表 )由解PAT的結果中得出
- NIT(Network Information Table, 網絡信息表)由解PAT的結果中得出
- BAT待補充

- TSDT(Service Description Table)

0x0002
- EIT, ST0x0012
- RST, ST0x0013
- TDT, TOT, ST0x0014

         下面以一個TS流的其中一個Packet中的Packet Header爲例進行說明:

wKiom1fGQj7yPuAtAAAqA6nmNzk790.png

sync_byte=01000111,                                就是0x47,這是DVB TS規定的同步字節,固定是0x47.

transport_error_indicator=0,                表示當前包沒有發生傳輸錯誤.

payload_unit_start_indicator=0,         含義參考ISO13818-1標準文檔

transport_priority=0,                                表示當前包是低優先級.

PID=00111 111001010x07e5,              Video PID

transport_scrambling_control=00,      表示節目沒有加密

adaptation_field_control=01                  0x01,具體含義請參考ISO13818-1

continuity_counte=0010              即0x02,表示當前傳送的相同類型的包是第3個

        TS流的基本內容就是這些了。

        回顧一下,TS流是一種位流(當然就是數字的),它是由ES流分割成PES後複用而成的;它經過網絡傳輸被機頂盒接收到;數字電視機頂盒接收到TS流後將解析TS流。

        TS流是由一個個Packet(包)構成的,每個包都是由Packet Header(包頭)和Packet Data(包數據)組成的。其中Packet Header指示了該Packet是什麼屬性的,並給出了該Packet Data的數據的唯一網絡標識符PID。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章