在 MPEG-2系統(tǒng)中,,信息復(fù)合/分離的過(guò)程稱為系統(tǒng)復(fù)接/分接,,由視頻,音頻的ES流和輔助數(shù)據(jù)復(fù)接生成的用于實(shí)際傳輸?shù)臉?biāo)準(zhǔn)信息流稱為MPEG-2傳送 流(TS:TransportStream),。 據(jù)傳輸媒體的質(zhì)量不同,,MPEG-2中定義了兩種復(fù)合信息流:傳送流(TS)和節(jié)目流(PS:ProgramStream)TS流與PS流的區(qū)別在于TS 流的包結(jié)構(gòu)是固定長(zhǎng)度的,而PS流的包結(jié)構(gòu)是可變長(zhǎng)度的,。
PS 包與TS包在結(jié)構(gòu)上的這種差異,,導(dǎo)致了它們對(duì)傳輸誤碼具有不同的抵抗能力,因而應(yīng)用的環(huán)境也有所不同。TS碼流由于采用了固定長(zhǎng)度的包結(jié)構(gòu),,當(dāng)傳輸誤碼破 壞了某一TS包的同步信息時(shí),,接收機(jī)可在固定的位置檢測(cè)它后面包中的同步信息,從而恢復(fù)同步,,避免了信息丟失,。而PS包由于長(zhǎng)度是變化的,一旦某一PS包 的同步信息丟失,,接收機(jī)無(wú)法確定下一包的同步位置,, 就會(huì)造成失步,導(dǎo)致嚴(yán)重的信息丟失,。因此,,在信道環(huán)境較為惡劣,傳輸誤碼較高時(shí),,一般采用TS碼流,;而在信道環(huán)境較好,傳輸誤碼較低時(shí),,一般采用PS碼流 如DVD等等,。 由于TS碼流具有較強(qiáng)的抵抗傳輸誤碼的能力,因此目前在傳輸媒體中進(jìn)行傳輸?shù)腗PEG-2碼流基本上都采用了TS碼流,。
TS/PES是 MPEG定義的標(biāo)準(zhǔn)格式,,無(wú)論是MPEG1還是MPEG2都給出了包含比特流句法在內(nèi)的定義,我們所說(shuō)的TS/PS都是在這里定義的,。因此談到TS/PS 時(shí)仍然離不了MPEG,,雖然AVS及IP的數(shù)據(jù)也可以封裝在TS中,因?yàn)镸PEG中給TS/PES的定義中允許封裝其他數(shù)據(jù),。
雖然也許可以不經(jīng)改變 的將不同編碼格式的碼流經(jīng)由TS/PS傳送,,但這事實(shí)上這是對(duì)MPEG的利用或擴(kuò)充。通常情況下,,封裝不同類型數(shù)據(jù)的時(shí)候我們需要在TS/PES添加標(biāo)準(zhǔn) 的(如果有的話)或自定義的描述,,并且在有些情況下原則上必須使用MPEG已經(jīng)定義的特殊描述,TS/PES并非總是透明的,。
簡(jiǎn)單說(shuō)就是ps流(主要用在DVD上)如是中間丟了一斷碼流,,后面的都沒(méi)法播了;而TS流(DVB-T,,DMB-TH等)如果斷了碼流,,后面的隨時(shí)可以再開(kāi)始解碼怎么看都行。
----------------------------------------------
PS流:
DVD節(jié)目中的MPEG2格式,,是MPEG2-PS,,全稱是Program Stream,,簡(jiǎn)稱PS流。TS的全稱則是Transport Stream,。MPEG2-PS主要應(yīng)用于存儲(chǔ)的具有固定時(shí)長(zhǎng)的節(jié)目,,如DVD電影,而MPEG-TS則主要應(yīng)用于實(shí)時(shí)傳送的節(jié)目,,比如實(shí)時(shí)廣播的電視節(jié) 目,。
這 兩種格式的主要區(qū)別是什么呢?你將DVD上的VOB文件的前面一截剪掉(或者干脆就是數(shù)據(jù)損壞),,那么就會(huì)導(dǎo)致整個(gè)文件無(wú)法解碼,,而電視節(jié)目是你任何時(shí)候 打開(kāi)電視機(jī)都能解碼(收看)的,所以,,MPEG2-TS格式的特點(diǎn)就是要求從視頻流的任一片段開(kāi)始都是可以獨(dú)立解碼的,。
----------------------------------------------
TS流:
ts流是由很多不同種類的包所組成的,這些數(shù)據(jù)包都是188個(gè)字節(jié)大小,這188個(gè)字節(jié)包含兩部分,包頭和負(fù)載,包頭包括同步信息,包信息等等,而負(fù)載則是傳輸?shù)臄?shù)據(jù),而這些負(fù)載則可以組成PES流或者私有流等等數(shù)據(jù)流.
舉 例說(shuō),一個(gè)TS流包括100個(gè)包,其中PSI信息包占20個(gè),PES數(shù)據(jù)包80個(gè),此TS流中只有一套節(jié)目流,不含有私有流,所以從這80個(gè)PES包中 的負(fù)載連接在一起,就是2個(gè)PES流(視頻,音頻),如果每個(gè)PES包的負(fù)載長(zhǎng)度為100字節(jié),則這兩個(gè)PES流一共長(zhǎng)度為8000個(gè)字節(jié).假設(shè)其中視頻 的PES流長(zhǎng)度為6000字節(jié).則視頻的6000字節(jié)的PES流,是由PES包組成的.PES包沒(méi)有固定的長(zhǎng)度,而是由包頭部的數(shù)據(jù)給出.而PS也是類似 TS流分解的方式,逆向的由PES包封裝成包,其中要添加PACKET_HEAD,SYSTEM_HEAD等信息.所以上次所做的程序,并不是 TS->PS的轉(zhuǎn)換,而是從一個(gè)復(fù)雜的TS流中,過(guò)濾去一套節(jié)目,構(gòu)造出一個(gè)簡(jiǎn)單的TS流的過(guò)程.
----------------------------------------------
mpeg-ts,mpeg-ps的轉(zhuǎn)換
mpeg2 文件都是以數(shù)據(jù)包傳遞的,同樣都是188個(gè)字節(jié)為一個(gè)包,但是作為傳輸流和節(jié)目流,包的組織結(jié)構(gòu)還是不太一樣的,作為傳輸流來(lái)說(shuō),其包含的包的 種類比較多(其實(shí)不是包的種類,而是包含不同用途的數(shù)據(jù)的種類比較多),比如有PID為0x0000的PAT,EIT,TDT,TOT,還有PMT,等等 不同的表或包.而節(jié)目流所包含的就比較少,只要包含PAT,PMT,以及包含音頻,視頻的PES包就可以了.所以在TS,PS的轉(zhuǎn)換 中,TS->PS的轉(zhuǎn)換比較簡(jiǎn)單,只要去掉相對(duì)沒(méi)有作用的包,在修改一下PAT,PMT表就可以了.
例 如現(xiàn)在我所做的DVB-T的MPEG2存儲(chǔ),就是先得到MPEG2壓縮的數(shù)據(jù)包(完整的包,包含同步等等所有信息,共188個(gè)字節(jié)),其中包含音頻,視 頻兩種數(shù)據(jù)包(兩者以PID不同,相區(qū)分).那么作為PS流存儲(chǔ)時(shí),就要虛構(gòu)出新的PAT,PMT表假如到PS流中,其中PAT,PMT中需要修改的就是 PMT中指向音頻,視頻流的PID值必須是要存儲(chǔ)的音頻,視頻數(shù)據(jù)包的PID.這樣就完成了TS->PS的轉(zhuǎn)換.
簡(jiǎn)言之:先對(duì)TS進(jìn)行過(guò)濾,保留要存儲(chǔ)的節(jié)目所對(duì)應(yīng)的音頻,視頻流,刪除所有其他的包.然后虛構(gòu)一個(gè)新的PAT,PMT表,其中音頻,視頻流的指針必須指向存儲(chǔ)的音,視頻流的PID.這樣就完成了轉(zhuǎn)換.
問(wèn)題:1.音頻,視頻同步問(wèn)題,這兩個(gè)包應(yīng)該以什么樣的比例交叉?zhèn)鬏斈?也就是多少個(gè)視頻包中間發(fā)送一個(gè)音頻包呢?如果這個(gè)比例控制不好,那么就容易造成音,視頻不同步.
2.對(duì)于我們所虛構(gòu)的PAT,PMT表應(yīng)該以什么樣的頻率發(fā)送呢?也就是說(shuō)發(fā)送多少PES包后,發(fā)送一次PSI包呢?這個(gè)問(wèn)題似乎影響不大.好象還沒(méi)有出現(xiàn)播放時(shí)的問(wèn)題.
3.我現(xiàn)在所采用的這種做法,雖然解決了存儲(chǔ),然后播放的問(wèn)題,但是似乎并沒(méi)有實(shí)現(xiàn)TS->PS的轉(zhuǎn)換,實(shí)現(xiàn)的是對(duì)TS流的過(guò)濾,即是把一個(gè)含有多套節(jié)目的TS流,轉(zhuǎn)換成一個(gè)只含有一套節(jié)目的TS流,不知道這樣說(shuō)對(duì)不對(duì)?
4.還有一個(gè)主要問(wèn)題就是對(duì)于TS流中傳輸PES信息的包來(lái)說(shuō),其負(fù)載信息中的數(shù)據(jù),如何組成PES流的呢?應(yīng)該是通過(guò)包頭部分的控制信息來(lái)明確的,還的好好看看文檔.