mpeg2文件都是以數(shù)據(jù)包傳遞的,同樣都是188個字節(jié)為一個包,但是作為傳輸流和節(jié)目流,包的組織結(jié)構(gòu)還是不太一樣的,作為傳輸流來說,其包含的包的種類比較多(其實不是包的種類,而是包含不同用途的數(shù)據(jù)的種類比較多),比如有PID為0x0000的PAT,EIT,TDT,TOT,還有PMT,等等不同的表或包.而節(jié)目流所包含的就比較少,只要包含PAT,PMT,以及包含音頻,視頻的PES包就可以了.所以在TS,PS的轉(zhuǎn)換中,TS->PS的轉(zhuǎn)換比較簡單,只要去掉相對沒有作用的包,在修改一下PAT,PMT表就可以了.
例如現(xiàn)在我所做的DVB-T的MPEG2存儲,就是先得到MPEG2壓縮的數(shù)據(jù)包(完整的包,包含同步等等所有信息,共188個字節(jié)),其中包含音頻,視頻兩種數(shù)據(jù)包(兩者以PID不同,相區(qū)分).那么作為PS流存儲時,就要虛構(gòu)出新的PAT,PMT表假如到PS流中,其中PAT,PMT中需要修改的就是PMT中指向音頻,視頻流的PID值必須是要存儲的音頻,視頻數(shù)據(jù)包的PID.這樣就完成了TS->PS的轉(zhuǎn)換.
簡言之:先對TS進行過濾,保留要存儲的節(jié)目所對應(yīng)的音頻,視頻流,刪除所有其他的包.然后虛構(gòu)一個新的PAT,PMT表,其中音頻,視頻流的指針必須指向存儲的音,視頻流的PID.這樣就完成了轉(zhuǎn)換.
問題:1.音頻,視頻同步問題,這兩個包應(yīng)該以什么樣的比例交叉?zhèn)鬏斈?也就是多少個視頻包中間發(fā)送一個音頻包呢?如果這個比例控制不好,那么就容易造成音,視頻不同步.
2.對于我們所虛構(gòu)的PAT,PMT表應(yīng)該以什么樣的頻率發(fā)送呢?也就是說發(fā)送多少PES包后,發(fā)送一次PSI包呢?這個問題似乎影響不大.好象還沒有出現(xiàn)播放時的問題.
3.我現(xiàn)在所采用的這種做法,雖然解決了存儲,然后播放的問題,但是似乎并沒有實現(xiàn)TS->PS的轉(zhuǎn)換,實現(xiàn)的是對TS流的過濾,即是把一個含有多套節(jié)目的TS流,轉(zhuǎn)換成一個只含有一套節(jié)目的TS流,不知道這樣說對不對?
4.還有一個主要問題就是對于TS流中傳輸PES信息的包來說,其負載信息中的數(shù)據(jù),如何組成PES流的呢?應(yīng)該是通過包頭部分的控制信息來明確的,還的好好看看文檔.