TS傳輸流標準介紹
來源:中國數字電視論壇 編輯:數字音視工程 2009-03-04 00:00:00 加入收藏
MPEG組織于1994年推出MPEG-2壓縮標準,以實現視/音頻服務與應用互操作的可能性,MPEG-2標準是針對標準數字電視和高清晰度電視在各種應用下的壓縮方案和系統層的詳細規定。對應于不同的應用,符合MPEG-2標準的碼流又分為傳送流和程序流,本文主要講解了傳送流有關的部分數據結構,從實際應用的傳送流碼流中截取了部分碼流做了說明,并給出了部分解析傳送流碼流的實例程序。
在MPEG-II標準中,為了將一個或更多的音頻、視頻或其他的基本數據流合成單個或多個數據流,以適應于存儲和傳送,必須對其重新進行打包編碼,在碼流中還需插入各種時間標記、系統控制等信息,最后送到信道編碼與調制器。這樣可以形成兩種數據流——傳送流(TS)和程序流(PS),分別適用于不同的應用,圖1給出了單路節目的視音頻數據流的復用框圖。
傳送流(Transport Stream)簡稱TS流,它是根據ITU-T Rec.H.222.0|ISO/IEC 13818-2 和ISO/IEC 13818-3協議而定義的一種數據流,其目的是為了在有可能發生嚴重錯誤的情況下進行一道或多道程序編碼數據的傳送和存儲。這種錯誤表現為比特值錯誤或分組丟失。傳送流由一道或多道節目組成,每道節目由一個或多個原始流和一些其他流復合在一起,包括視頻流、音頻流、節目特殊信息流(PSI)和其他數據包。其中PSI表有4種類型:節目關聯表(PAT)、節目映射表(PMT)、網絡信息表和條件訪問表。傳送流應用比較廣泛,如視音頻資料的保存、電視節目的非線性編輯系統及其網絡等。在開發機頂盒以及視頻設備時有時需要對碼流的編碼知識有比較清楚地了解,這樣才能在遇到問題時做出全面的 分析。
TS流結構分析
如圖2所示,TS包的長度是固定的,為188字節。包括同步字節(sync_byte)0x47和數據包識別號PID等。PID為13位字段,指示存儲于分組有效負載中數據的類型,PID值0x0000為程序關聯表保留,而0x0001為條件訪問表保留,0x1FFF為空分組保留。從PID可以判斷其后面負載的數據類型是視頻流、音頻流、PSI還是其他數據包。
PSI描述說明
在MPEG-II中定義了節目特定信息(PSI),PSI用來描述傳送流的組成結構,在MPEG-II系統中擔任極其重要的角色,在多路復用中尤為重要的是PAT表和PMT表。PAT表給出了一路MPEG-II碼流中有多少套節目,以及它與PMT表PID之間的對應關系;PMT表給出了一套節目的具體組成情況與其視頻、音頻等PID對應關系。PSI提供了使接收機能夠自動配置的信息,用于對復用流中的不同節目流進行解復用和解碼。PSI信息由以下幾種類型表組成:
◆ 節目關聯表(PAT Program Association Table)
PAT表用MPEG指定的PID(00)標明,通常用PID=0表示。它的主要作用是針對復用的每一路傳輸流,提供傳輸流中包含哪些節目、節目的編號以及對應節目的節目映射表(PMT)的位置,即PMT的TS包的包標識符(PID)的值,同時還提供網絡信息表(NIT)的位置,即NIT的TS包的包標識符(PID)的值。
◆ 條件接收表(CAT Conditional Access Table)
CAT表用MPEG指定的PID(01)標明,通常用PID=1表示。它提供了在復用流中條件接收系統的有關信息,指定CA系統與它們相應的授權管理信息(EMM))之間的聯系,指定EMM的PID,以及相關的參數。
◆ 節目映射表(PMT Program Map Table)
節目映射表指明該節目包含的內容,即該節目由哪些流組成,這些流的類型(音頻、視頻、數據),以及組成該節目的流的位置,即對應的TS包的PID值,每路節目的節目時鐘參考(PCR)字段的位置。
◆ 網絡信息表(NIT Nerwork Information Table)
網絡信息表提供關于多組傳輸流和傳輸網絡相關的信息,其中包含傳輸流描述符、通道頻率、衛星發射器號碼、調制特性等信息。
◆ 傳輸流描述表(TSDT Transport Stream Description Table)
傳輸流描述表由PID為2的TS包傳送,提供傳輸流的一些主要參數。
◆ 專用段(private_section)
MPEG-2還定義了一種專用段用于傳送用戶自己定義的專用數據。
◆ 描述符(Descripter)
除了上述的表述之外,MPEG-2還定義了許多描述符,這些描述符提供關于視頻流、音頻流、語言、層次、系統時鐘、碼率等多方面的信息,在PSI的表中可以靈活的采用這些描述符進一步為接收機提供更多的信息。
在解碼時,接收機首先根據PID值找到PAT表,找出相應節目的PMT表的PID,再由該PID找到該PMT表,再在PMT表中找到相應的碼流,然后開始解碼。PSI結構和TS流的關系示例如圖3所示。
PES包格式說明
經過視音頻壓縮來的數碼流稱為ES流,ES流經過打包器輸出PES流。PES包是非定長的,音頻PES包不超過64K字節,視頻一般一幀一個PES包。為實現解碼的同步,還需插入相關的標志信息,多個打包后的數碼流再經過復用器成為傳送流(TS流),PES包的結構圖如圖4所示。
對截取的MPEG-II TS碼流實例分析
對截取的包含PSI信息的碼流分析
從MPEG-II TS流片源上截取的包含PSI信息的碼流如圖5所示。
搜索TS數據流從包同步字0x47開始,由于該同步頭字節并不是唯一的,數據包中可能有碼字也恰為其值。因此,要準確檢測同步,必須首先找到輸入緩沖區中第一個0x47,然后將其指針向后推187個字節的位置再檢測是否為0x47,如果是,則輸出包同步信號;接著每隔187字節檢測一次,如是0x47,則繼續輸出包同步信號,如不是,則重新開始搜索0x47。
在上段截取的包含PSI信息的碼流中是一個TS文件中的起始數據截圖,TS流文件中的數據Ts包頭以0x47開頭,在0x47后3字節是ts包頭信息:0x40中的4表示此payload_unit_start_indicator是1,表示包含TS流分組的第一個有效字節包含point_field字段,占一個字節;ID為0x00,表示此TS流包含PSI信息,在此是PAT包;0x1c中的1表示僅不含附加信息,僅含有有效載荷;C表示continuity_ counter=c。在4字節的TS包頭之后時一字節的point_field=0,然后是program_association_ section()字段的信息。Table_id=0x00,表示在此PSI內容是program_ association_section()字段的信息內容;0xB0表示的B是同步頭以及保留位,0是section_length的一部分;section_length=0x00d(包含0x0D的前一個0);transport_ stream_ id=0x0000;0xC1包含保留位、vision_number、current_ next_indicator ,C中的11是保留位,C中的00和低4位中的前3位是vision_number部分,最低位是current_next_indicator部分。
vision_number=0x00;current_next_indicator=1,表示所 發送的pat表當前有效;ection_number=0x00,last_ section_number=0x0000;program_number=0x0001;0xE0中的E的高三位是保留位,E的最低位和其后的4位0以及其后的8位都是program_map_PID字段內容,所以program_map_PID=0x032,即PMT的PID為0x32;CRC是0xbcf11595。其后的0xff為填充字節。
在第二個TS流中,在0x47后3字節是ts包頭信息:0x40中的4表示此payload_unit_start_indicator是1,表示包含TS流分組的第一個有效字節包含point_field字段,占一個字節。ID為0x32,表示此TS流包含PSI信息PID為0x032,是pat表中的PID,說明此TS流中包含PMT表的信息。point_field=0x00,(Ts頭和point_field1字節共5字節)point_field后是0x02表示此處的pid為ts_program_ map_section()字段。0xB0表示的B是同步頭以及保留位,0是section_length的一部部分Section_length=0x02d,規定此字段的字節數,包含CRC部分;program_number=0x0001;0xC1包含保留位、vision_number、current_next_indicator,C中的11是保留位,C中的00和低4位中的前3位是vision_number部分,最低位是current_next_indicator部分;version_number=0x0,current_next_indicator=1,section_number=0x00,last_section_number=0x00;0xE0中的E的高三位是保留位,E的最低位和其后的4位0以及其后的8位都是PCR_PID字段內容,PCR_PID=0x020;其后的0xF0中的高4位是保留位,低4位和其后的8位都是program_info_length字段內容,表示描述字段的字節數,program_info_length=0x000;stream_type=0x03表示其后的PID為ISO/IEC 11172音頻數據的PID,其后的0xE0中的E的高三位是保留位,E的最低位和其后的4位0以及其后的8位都是element_PID字段內容,element_PID=0x021,表示TS流中如果包含音頻部分,則此TS流的PID為0x21;其后的0xF0中的高4位是保留位,低4位和其后的8位都是ES_info_length字段內容,表示描述字段的字節數,ES_info_length=0x006,表示其后的6個字節為原始流的描述部分。6個字節之后的stream_type=0x02,表示其后的PID為ITU-T Rec. H.262 | ISO/IEC 13818-2視頻數據的PID;其后的0xE0中的E的高三位是保留位,E的最低位和其后的4位0以及其后的8位都是element_PID字段內容,element_PID=0x20,表示TS流中如果包含視頻部分,則此TS流的PID為0x20, 其后的0xF0中的高4位是保留位,低4位和其后的8位都是ES_info_length字段內容,表示描述字段的字節數,ES_info_length=0x10,表示其后的16個字節為原始流的描述部分。其后的4字節是CRC校驗部分,然后是填充部分。
一般MPEG-II TS碼流分析
從MPEG-II TS流片源上截取的碼流如圖6所示。
如上述截取的碼流所示:Ts包頭以0x47開頭,在0x47后3字節是TS包頭信息:ID為視頻ID,是0x20,field_point字段00,其后是PES包包頭:00 01 E0表示是視頻PES包包頭,其后的幀有關信息共5字節,2字節PES包長度是27 6A,表示此PES數據包的長度是0x276a即10090字節;2字節標準位信息是85 80,5字節中的最后一字節表示附加數據長度是0B,其后是正式視頻數據:開始為00 00 01 00,是I、B、P幀的判別在9D,二進制為10 011 101中的中間3位011指名幀幀是什么樣的幀,次例中為011即為B幀,當是001時為I幀,010時為P幀。
從某種意義上來說,數字電視的發展主要取決于數字壓縮技術和數字調制解調技術的發展。目前MPEG-2標準較為成熟,雖然碼率壓縮的辦法許多,如MPEG系列(MPEG-1、MPEG-2、MPEG-4、MPEG-7)以及小波壓縮技術等。但在實用化方面MPEG-2已經走在了前面,且遵循標準研制出的系統產品也已非常成熟,實際商業運營和效果也非常成功。
總之,MPEG-II傳輸流在數字電視系統中得到了廣泛的應用,在應用中可以通過分析碼流來獲得傳輸流的PID、PRC等信息,用來設置解碼器等用處。
mpeg PMT 的 stream type匯總:
H.222總是在修訂,增加最新的類型. 以下來源于 H.222.0 (2006) Amendment 2
Value Description
0x00 ITU-T | ISO/IEC Reserved
0x01 ISO/IEC 11172-2 Video
0x02 ITU-T Rec. H.262 | ISO/IEC 13818-2 Video or ISO/IEC 11172-2 constrained parameter video stream
0x03 ISO/IEC 11172-3 Audio
0x04 ISO/IEC 13818-3 Audio
0x05 ITU-T Rec. H.222.0 | ISO/IEC 13818-1 private_sections
0x06 ITU-T Rec. H.222.0 | ISO/IEC 13818-1 PES packets containing private data
0x07 ISO/IEC 13522 MHEG
0x08 ITU-T Rec. H.222.0 | ISO/IEC 13818-1 Annex A DSM-CC
0x09 ITU-T Rec. H.222.1
0x0A ISO/IEC 13818-6 type A
0x0B ISO/IEC 13818-6 type B
0x0C ISO/IEC 13818-6 type C
0x0D ISO/IEC 13818-6 type D
0x0E ITU-T Rec. H.222.0 | ISO/IEC 13818-1 auxiliary
0x0F ISO/IEC 13818-7 Audio with ADTS transport syntax
0x10 ISO/IEC 14496-2 Visual
0x11 ISO/IEC 14496-3 Audio with the LATM transport syntax as defined in ISO/IEC 14496-3/Amd.1
0x12 ISO/IEC 14496-1 SL-packetized stream or FlexMux stream carried in PES packets
0x13 ISO/IEC 14496-1 SL-packetized stream or FlexMux stream carried in ISO/IEC 14496_sections
0x14 ISO/IEC 13818-6 Synchronized Download Protocol
0x15 Metadata carried in PES packets
0x16 Metadata carried in metadata_sections
0x17 Metadata carried in ISO/IEC 13818-6 Data Carousel
0x18 Metadata carried in ISO/IEC 13818-6 Object Carousel
0x19 Metadata carried in ISO/IEC 13818-6 Synchronized Download Protocol
0x1A IPMP stream (defined in ISO/IEC 13818-11, MPEG-2 IPMP)
0x1B AVC video stream as defined in ITU-T Rec. H.264 | ISO/IEC 14496-10 Video
0x1C ISO/IEC 14496-3 Audio, without using any additional transport syntax, such as DST, ALS and SLS
0x1D ISO/IEC 14496-17 Text
0x1E Auxiliary video stream as defined in ISO/IEC 23002-3
0x1F-0x7E ITU-T Rec. H.222.0 | ISO/IEC 13818-1 Reserved
0x7F IPMP stream
0x80-0xFF User Private
評論comment