TS傳輸流標準介紹
來源:中國數(shù)字電視論壇 編輯:數(shù)字音視工程 2009-03-04 00:00:00 加入收藏
MPEG組織于1994年推出MPEG-2壓縮標準,以實現(xiàn)視/音頻服務(wù)與應(yīng)用互操作的可能性,MPEG-2標準是針對標準數(shù)字電視和高清晰度電視在各種應(yīng)用下的壓縮方案和系統(tǒng)層的詳細規(guī)定。對應(yīng)于不同的應(yīng)用,符合MPEG-2標準的碼流又分為傳送流和程序流,本文主要講解了傳送流有關(guān)的部分數(shù)據(jù)結(jié)構(gòu),從實際應(yīng)用的傳送流碼流中截取了部分碼流做了說明,并給出了部分解析傳送流碼流的實例程序。
在MPEG-II標準中,為了將一個或更多的音頻、視頻或其他的基本數(shù)據(jù)流合成單個或多個數(shù)據(jù)流,以適應(yīng)于存儲和傳送,必須對其重新進行打包編碼,在碼流中還需插入各種時間標記、系統(tǒng)控制等信息,最后送到信道編碼與調(diào)制器。這樣可以形成兩種數(shù)據(jù)流——傳送流(TS)和程序流(PS),分別適用于不同的應(yīng)用,圖1給出了單路節(jié)目的視音頻數(shù)據(jù)流的復(fù)用框圖。
傳送流(Transport Stream)簡稱TS流,它是根據(jù)ITU-T Rec.H.222.0|ISO/IEC 13818-2 和ISO/IEC 13818-3協(xié)議而定義的一種數(shù)據(jù)流,其目的是為了在有可能發(fā)生嚴重錯誤的情況下進行一道或多道程序編碼數(shù)據(jù)的傳送和存儲。這種錯誤表現(xiàn)為比特值錯誤或分組丟失。傳送流由一道或多道節(jié)目組成,每道節(jié)目由一個或多個原始流和一些其他流復(fù)合在一起,包括視頻流、音頻流、節(jié)目特殊信息流(PSI)和其他數(shù)據(jù)包。其中PSI表有4種類型:節(jié)目關(guān)聯(lián)表(PAT)、節(jié)目映射表(PMT)、網(wǎng)絡(luò)信息表和條件訪問表。傳送流應(yīng)用比較廣泛,如視音頻資料的保存、電視節(jié)目的非線性編輯系統(tǒng)及其網(wǎng)絡(luò)等。在開發(fā)機頂盒以及視頻設(shè)備時有時需要對碼流的編碼知識有比較清楚地了解,這樣才能在遇到問題時做出全面的 分析。
TS流結(jié)構(gòu)分析
如圖2所示,TS包的長度是固定的,為188字節(jié)。包括同步字節(jié)(sync_byte)0x47和數(shù)據(jù)包識別號PID等。PID為13位字段,指示存儲于分組有效負載中數(shù)據(jù)的類型,PID值0x0000為程序關(guān)聯(lián)表保留,而0x0001為條件訪問表保留,0x1FFF為空分組保留。從PID可以判斷其后面負載的數(shù)據(jù)類型是視頻流、音頻流、PSI還是其他數(shù)據(jù)包。
PSI描述說明
在MPEG-II中定義了節(jié)目特定信息(PSI),PSI用來描述傳送流的組成結(jié)構(gòu),在MPEG-II系統(tǒng)中擔任極其重要的角色,在多路復(fù)用中尤為重要的是PAT表和PMT表。PAT表給出了一路MPEG-II碼流中有多少套節(jié)目,以及它與PMT表PID之間的對應(yīng)關(guān)系;PMT表給出了一套節(jié)目的具體組成情況與其視頻、音頻等PID對應(yīng)關(guān)系。PSI提供了使接收機能夠自動配置的信息,用于對復(fù)用流中的不同節(jié)目流進行解復(fù)用和解碼。PSI信息由以下幾種類型表組成:
◆ 節(jié)目關(guān)聯(lián)表(PAT Program Association Table)
PAT表用MPEG指定的PID(00)標明,通常用PID=0表示。它的主要作用是針對復(fù)用的每一路傳輸流,提供傳輸流中包含哪些節(jié)目、節(jié)目的編號以及對應(yīng)節(jié)目的節(jié)目映射表(PMT)的位置,即PMT的TS包的包標識符(PID)的值,同時還提供網(wǎng)絡(luò)信息表(NIT)的位置,即NIT的TS包的包標識符(PID)的值。
◆ 條件接收表(CAT Conditional Access Table)
CAT表用MPEG指定的PID(01)標明,通常用PID=1表示。它提供了在復(fù)用流中條件接收系統(tǒng)的有關(guān)信息,指定CA系統(tǒng)與它們相應(yīng)的授權(quán)管理信息(EMM))之間的聯(lián)系,指定EMM的PID,以及相關(guān)的參數(shù)。
◆ 節(jié)目映射表(PMT Program Map Table)
節(jié)目映射表指明該節(jié)目包含的內(nèi)容,即該節(jié)目由哪些流組成,這些流的類型(音頻、視頻、數(shù)據(jù)),以及組成該節(jié)目的流的位置,即對應(yīng)的TS包的PID值,每路節(jié)目的節(jié)目時鐘參考(PCR)字段的位置。
◆ 網(wǎng)絡(luò)信息表(NIT Nerwork Information Table)
網(wǎng)絡(luò)信息表提供關(guān)于多組傳輸流和傳輸網(wǎng)絡(luò)相關(guān)的信息,其中包含傳輸流描述符、通道頻率、衛(wèi)星發(fā)射器號碼、調(diào)制特性等信息。
◆ 傳輸流描述表(TSDT Transport Stream Description Table)
傳輸流描述表由PID為2的TS包傳送,提供傳輸流的一些主要參數(shù)。
◆ 專用段(private_section)
MPEG-2還定義了一種專用段用于傳送用戶自己定義的專用數(shù)據(jù)。
◆ 描述符(Descripter)
除了上述的表述之外,MPEG-2還定義了許多描述符,這些描述符提供關(guān)于視頻流、音頻流、語言、層次、系統(tǒng)時鐘、碼率等多方面的信息,在PSI的表中可以靈活的采用這些描述符進一步為接收機提供更多的信息。
在解碼時,接收機首先根據(jù)PID值找到PAT表,找出相應(yīng)節(jié)目的PMT表的PID,再由該PID找到該PMT表,再在PMT表中找到相應(yīng)的碼流,然后開始解碼。PSI結(jié)構(gòu)和TS流的關(guān)系示例如圖3所示。
PES包格式說明
經(jīng)過視音頻壓縮來的數(shù)碼流稱為ES流,ES流經(jīng)過打包器輸出PES流。PES包是非定長的,音頻PES包不超過64K字節(jié),視頻一般一幀一個PES包。為實現(xiàn)解碼的同步,還需插入相關(guān)的標志信息,多個打包后的數(shù)碼流再經(jīng)過復(fù)用器成為傳送流(TS流),PES包的結(jié)構(gòu)圖如圖4所示。
對截取的MPEG-II TS碼流實例分析
對截取的包含PSI信息的碼流分析
從MPEG-II TS流片源上截取的包含PSI信息的碼流如圖5所示。
搜索TS數(shù)據(jù)流從包同步字0x47開始,由于該同步頭字節(jié)并不是唯一的,數(shù)據(jù)包中可能有碼字也恰為其值。因此,要準確檢測同步,必須首先找到輸入緩沖區(qū)中第一個0x47,然后將其指針向后推187個字節(jié)的位置再檢測是否為0x47,如果是,則輸出包同步信號;接著每隔187字節(jié)檢測一次,如是0x47,則繼續(xù)輸出包同步信號,如不是,則重新開始搜索0x47。
在上段截取的包含PSI信息的碼流中是一個TS文件中的起始數(shù)據(jù)截圖,TS流文件中的數(shù)據(jù)Ts包頭以0x47開頭,在0x47后3字節(jié)是ts包頭信息:0x40中的4表示此payload_unit_start_indicator是1,表示包含TS流分組的第一個有效字節(jié)包含point_field字段,占一個字節(jié);ID為0x00,表示此TS流包含PSI信息,在此是PAT包;0x1c中的1表示僅不含附加信息,僅含有有效載荷;C表示continuity_ counter=c。在4字節(jié)的TS包頭之后時一字節(jié)的point_field=0,然后是program_association_ section()字段的信息。Table_id=0x00,表示在此PSI內(nèi)容是program_ association_section()字段的信息內(nèi)容;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,表示所 發(fā)送的pat表當前有效;ection_number=0x00,last_ section_number=0x0000;program_number=0x0001;0xE0中的E的高三位是保留位,E的最低位和其后的4位0以及其后的8位都是program_map_PID字段內(nèi)容,所以program_map_PID=0x032,即PMT的PID為0x32;CRC是0xbcf11595。其后的0xff為填充字節(jié)。
在第二個TS流中,在0x47后3字節(jié)是ts包頭信息:0x40中的4表示此payload_unit_start_indicator是1,表示包含TS流分組的第一個有效字節(jié)包含point_field字段,占一個字節(jié)。ID為0x32,表示此TS流包含PSI信息PID為0x032,是pat表中的PID,說明此TS流中包含PMT表的信息。point_field=0x00,(Ts頭和point_field1字節(jié)共5字節(jié))point_field后是0x02表示此處的pid為ts_program_ map_section()字段。0xB0表示的B是同步頭以及保留位,0是section_length的一部部分Section_length=0x02d,規(guī)定此字段的字節(jié)數(shù),包含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字段內(nèi)容,PCR_PID=0x020;其后的0xF0中的高4位是保留位,低4位和其后的8位都是program_info_length字段內(nèi)容,表示描述字段的字節(jié)數(shù),program_info_length=0x000;stream_type=0x03表示其后的PID為ISO/IEC 11172音頻數(shù)據(jù)的PID,其后的0xE0中的E的高三位是保留位,E的最低位和其后的4位0以及其后的8位都是element_PID字段內(nèi)容,element_PID=0x021,表示TS流中如果包含音頻部分,則此TS流的PID為0x21;其后的0xF0中的高4位是保留位,低4位和其后的8位都是ES_info_length字段內(nèi)容,表示描述字段的字節(jié)數(shù),ES_info_length=0x006,表示其后的6個字節(jié)為原始流的描述部分。6個字節(jié)之后的stream_type=0x02,表示其后的PID為ITU-T Rec. H.262 | ISO/IEC 13818-2視頻數(shù)據(jù)的PID;其后的0xE0中的E的高三位是保留位,E的最低位和其后的4位0以及其后的8位都是element_PID字段內(nèi)容,element_PID=0x20,表示TS流中如果包含視頻部分,則此TS流的PID為0x20, 其后的0xF0中的高4位是保留位,低4位和其后的8位都是ES_info_length字段內(nèi)容,表示描述字段的字節(jié)數(shù),ES_info_length=0x10,表示其后的16個字節(jié)為原始流的描述部分。其后的4字節(jié)是CRC校驗部分,然后是填充部分。
一般MPEG-II TS碼流分析
從MPEG-II TS流片源上截取的碼流如圖6所示。
如上述截取的碼流所示:Ts包頭以0x47開頭,在0x47后3字節(jié)是TS包頭信息:ID為視頻ID,是0x20,field_point字段00,其后是PES包包頭:00 01 E0表示是視頻PES包包頭,其后的幀有關(guān)信息共5字節(jié),2字節(jié)PES包長度是27 6A,表示此PES數(shù)據(jù)包的長度是0x276a即10090字節(jié);2字節(jié)標準位信息是85 80,5字節(jié)中的最后一字節(jié)表示附加數(shù)據(jù)長度是0B,其后是正式視頻數(shù)據(jù):開始為00 00 01 00,是I、B、P幀的判別在9D,二進制為10 011 101中的中間3位011指名幀幀是什么樣的幀,次例中為011即為B幀,當是001時為I幀,010時為P幀。
從某種意義上來說,數(shù)字電視的發(fā)展主要取決于數(shù)字壓縮技術(shù)和數(shù)字調(diào)制解調(diào)技術(shù)的發(fā)展。目前MPEG-2標準較為成熟,雖然碼率壓縮的辦法許多,如MPEG系列(MPEG-1、MPEG-2、MPEG-4、MPEG-7)以及小波壓縮技術(shù)等。但在實用化方面MPEG-2已經(jīng)走在了前面,且遵循標準研制出的系統(tǒng)產(chǎn)品也已非常成熟,實際商業(yè)運營和效果也非常成功。
總之,MPEG-II傳輸流在數(shù)字電視系統(tǒng)中得到了廣泛的應(yīng)用,在應(yīng)用中可以通過分析碼流來獲得傳輸流的PID、PRC等信息,用來設(shè)置解碼器等用處。
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