資源描述:
《關(guān)于TS流的解析》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。
1、關(guān)于TS流的解析TS即是'TransportStream**的縮寫。他是分包發(fā)送的,每一個(gè)包長(zhǎng)為188字節(jié)。在TS流里可以填入很多類型的數(shù)據(jù),如視頻、音頻、H定義信息等。他的包的結(jié)構(gòu)為,包頭為4個(gè)字節(jié),負(fù)載為184個(gè)字節(jié)(這184個(gè)字節(jié)不一定都是有效數(shù)據(jù),有一些可能為填充數(shù)據(jù))。工作形式:因?yàn)樵赥S流里可以填入很多種東西,所以有必要有一種機(jī)制來確定怎么來標(biāo)浜這些數(shù)據(jù)。制定TS流標(biāo)準(zhǔn)的機(jī)構(gòu)就規(guī)定了一些數(shù)據(jù)結(jié)構(gòu)來定義。比如:PSI(ProgramSpecificInformation)衣,所以解析起來就像這樣:先接收一個(gè)負(fù)載
2、里為PAT的數(shù)據(jù)包,在整個(gè)數(shù)拯包里找到一個(gè)PMT包的ID。然后再接收一個(gè)含有PMT的數(shù)協(xié)包,在這個(gè)數(shù)拯包里找到有關(guān)填入數(shù)據(jù)類型的ID。Z后就在接收到的TS包里找含有這個(gè)ID的負(fù)載內(nèi)容,這個(gè)內(nèi)容就是填入的信息。根據(jù)填入的數(shù)據(jù)類烈的ID的不同,在TS流復(fù)合多種信息是可行的。關(guān)鍵就是找到標(biāo)識(shí)的ID號(hào)?,F(xiàn)在以一個(gè)例子來說明具體的操作:在開始Z前先給出一片實(shí)際?TS流例子:0000f32ch474000170000B00D0001C100000001E0;G@..0000f33ch20A2C32941FFFFFFFFFFFFFFF
3、FFFFFFF;19.)A0000f34chFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;0000f35chFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;0000f36chFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;0000f37chFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;0000f38chFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;0000f39chFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
4、F;0000f3achFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;0000f3bchFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;0000f3cchFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;0000f3dchFFFFFFFFFFFFFFFFFFFFFFFF47402017;G@.0000f3ech0002B01B0001C10000E021F0001BE021;0000f3fch:F0042A027E1F03E022F0005D16BD48;?*.-..?
5、?].紿具體的分析就以這個(gè)例子來分析。//AdjustTSpacketheadervoidadjust_TS_packet_header(TS_packet_header*pheader){unsignedcharbuf[4];memcpy(buf,pheader,4);pheader->transport_error_indicator=buf[1]>>7;pheader->payload_unit_start_indicator=buf[1]>>6&0x01;pheader?>transport_priority=b
6、uf[1]>>5&0x01;pheader->PID=(buf[1]&0x1F)<<8
7、buf[2];pheader?>transport_scrambling_control=buf[3]>>6;pheader->adaption_field_control=buf[3]>>4&0x03;pheader->continuity_counter=buf[3]&0x03;}這是一個(gè)調(diào)整TS流數(shù)據(jù)包頭的兩數(shù),這里牽扯到位段調(diào)整的問題?,F(xiàn)在看一下TS流數(shù)據(jù)包頭的結(jié)構(gòu)的定義://Transportpacketheadertype
8、defstructTS_packet_headerunsignedsync_byte:8;unsignedtransport_error_indicator:1;unsignedpayload_unit_start_indicator:1;unsignedtransport_priority:1;unsignedPID:13;unsignedtransport_scrambling_control:2;unsignedadaption_field_control:2;unsignedcontinuity_counter:
9、4;}TS_packet_header;F面我們來分析,在ISO/IEC13818-1里有說明,PAT(ProgramAssociationlable)的PID值為0x00,TS包的標(biāo)識(shí)(即sync_byte)為0x47,并且為了確保這個(gè)TS包里的數(shù)據(jù)有效,所以我們一開始查找474000這三紐16進(jìn)制數(shù),為什么這樣?