摘 要:主要是針對(duì)從視頻采集卡中出來的兩路實(shí)時(shí)MPEG-2 PS流進(jìn)行了拼接研究及實(shí)現(xiàn)。在拼接過程中,通過正確選取拼接點(diǎn)、對(duì)系統(tǒng)參數(shù)如PTS,DTS等進(jìn)行調(diào)整達(dá)到了視頻流的連續(xù)播放效果,通過對(duì)視頻幀的即時(shí)前向查找,避免了傳統(tǒng)方法下通過等待查找可能造成的緩沖器下溢問題,并通過vbv[CD#*2]delay參數(shù)的前后關(guān)聯(lián)性,解決了緩沖器的上溢等問題,進(jìn)而避免了拼接點(diǎn)處經(jīng)常會(huì)出現(xiàn)的馬賽克、花屏、黑屏及閃爍等問題。
關(guān)鍵詞:MPEG-2 PS流;拼接點(diǎn);即時(shí)前向查找;vbv[CD#*2]delay
中圖分類號(hào):TN919.8文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1004-373X(2008)07-182-03
Research and Implementation of MPEG-2 PS Stream Seamless Splicing
MA Wenjian,WEI Wudi
(Electrical and Information College,Sichuan University,Chengdu,610064,China)
Abstract:This paper addresses from the two road real MPEG-2 PS stream from the video capture cards of splicing research and implementation.Splicing in the process,by correctly selecting splicing point,the system parameters such as PTS,DTS,and other adjustments to the video broadcast continuous stream of results.Through the video frame immediately prior to the search for ways to avoid the traditional waiting for the next frame cased the possible buffer overflow,and through vbv[CD#*2]delay parameters before and after the association,the address of the buffer overflow problems thereby avoiding the splicing points often occur mosaic,Huaping blank screens and flicker,so as to achieve a better visual effect.
Keywords:MPEG-2 PS stream;splicing point;immediately prior to the search;vbv-delay
1 引 言
傳統(tǒng)的視頻處理都是在空間域中進(jìn)行的,但是實(shí)際傳輸?shù)拇a流都是壓縮形式的,所以對(duì)壓縮碼流的處理必須先將其解壓到空間域,在空間域中處理完成后,再將其重新進(jìn)行壓縮,其中壓縮/解壓縮所帶來的運(yùn)算量是非常大的,對(duì)于計(jì)算機(jī)來說要耗費(fèi)大量的內(nèi)存和CUP資源,很難實(shí)現(xiàn)實(shí)時(shí)的接收處理,因此實(shí)時(shí)視頻拼接技術(shù)成為其中的關(guān)鍵技術(shù)之一。
由于數(shù)字電視技術(shù)的迅速發(fā)展,多節(jié)目流的實(shí)時(shí)無縫拼接技術(shù)成為多媒體領(lǐng)域的關(guān)鍵技術(shù)之一,其主要是針對(duì)傳輸流(TS)的研究。但在一些以PS流為主的交互式多媒體領(lǐng)域,如視頻監(jiān)控、多媒體教室、視頻點(diǎn)播、視頻會(huì)議等,實(shí)時(shí)無縫拼接技術(shù)同樣有著重要的應(yīng)用。
2 解碼器的解碼原理
PS流在P-STD(Program-System Target Decoder)中解碼的過程如圖1所示。從多路復(fù)合流中取出的數(shù)據(jù)放入系統(tǒng)目標(biāo)解碼器中,通過分流得到各路基本流數(shù)據(jù),分別放入各自對(duì)應(yīng)的任意解碼緩沖區(qū)內(nèi)。其中出現(xiàn)在復(fù)合流中的單元、系統(tǒng)或包頭標(biāo)中的字節(jié)內(nèi)容不發(fā)送到任意緩沖區(qū)中,但可以用于控制系統(tǒng),例如:緩沖區(qū)的大小,在序列頭標(biāo)中得到確定。
圖1 P-STD結(jié)構(gòu)圖
圖1中在解碼時(shí)間tdn(j),訪問單元的所有數(shù)據(jù)以某一次序立即被刪除,即刪除放入緩沖區(qū)時(shí)間最長的數(shù)據(jù)An(j)。在視頻基本流中,圖像組和放在圖像前的序列頭數(shù)據(jù)在同一時(shí)刻被刪除。對(duì)于視頻序列的第一個(gè)編碼圖像,所有0位或放在序列頭的最前面的那一字節(jié)在同一時(shí)刻被刪除。注意,這僅適合視頻序列的第一個(gè)圖像,而不適合視頻序列的序列頭中的其他部分。當(dāng)存取單元(訪問單元)從緩沖區(qū)中刪除時(shí),他被立即放入解碼器D1~Dn中進(jìn)行立即解碼,在送到系統(tǒng)目標(biāo)解碼器的輸出觀察程序之前,有可能在重定序緩沖區(qū)O1~On中延遲,以保證圖像幀按正確的順序進(jìn)行顯示。
3 視頻校驗(yàn)緩沖器(VBV)
VBV是一個(gè)假象的解碼器,他在概念上與編碼器的輸出相聯(lián)結(jié)。他等同于P-STD中的視頻緩沖區(qū)部分。圖2給出了恒速率編碼的視頻位流VBV緩沖區(qū)占有量說明圖。其中,vbv[CD#*2]delay(n)為第n幀的vbv[CD#*2]delay值,表示幀圖像起始碼的最后一個(gè)字節(jié)到達(dá)解碼緩沖器后,在對(duì)該幀解碼前還需要等待的90 kHz系統(tǒng)時(shí)鐘周期數(shù),vbv[CD#*2]delay用來在播放開始時(shí)設(shè)置解碼緩沖器的的初始分配,即分配一塊多大的內(nèi)存來接收?qǐng)D像數(shù)據(jù),通過調(diào)整編碼器參數(shù)vbv[CD#*2]delay可以保證緩沖器不發(fā)生溢出。其中:
vbv[CD#*2]delay(n)=Bn×fR[JY](1)
Bn是位于圖像n即將被解碼之前,除去圖像n數(shù)據(jù)元素之前的任何GOP頭數(shù)據(jù)、序列頭數(shù)據(jù)和picture[CD#*2]start[CD#*2]code后的VBV 的占有情況;R為編碼比特率;f是系統(tǒng)時(shí)鐘頻率為90 kHz。
我們可以設(shè)VBV在第一幀編碼前的初始狀態(tài)為init[CD#*2]bit,幀率為picture[CD#*2]rate,Dn為從vbv[CD#*2]delay(n)參數(shù)最后一個(gè)字節(jié)到下一幀此位置時(shí)等待的數(shù)據(jù)長度。根據(jù)定義可得:
Bn=init[CD#*2]bit+n×Rpicture[CD#*2]rate-(∑n-1i=0Di+b0)[JY](2)
所以代入式(1)可得:
圖2 VBV緩沖區(qū)占有量說明
4 實(shí)時(shí)流的拼接過程
為了拼接前后的幀正確顯示,而不出現(xiàn)馬賽克、花屏,我們必須先進(jìn)行幀選擇。設(shè)一組頭序列(切出)的編碼順序?yàn)椋?/p>
I2,B0,B1,P5,B3,B4,P8,B6,B7,P11,B9,B10
則其對(duì)應(yīng)的顯示幀順序即為:
B0,B1,I2,B3,B4,P5,B6,B7,P8,B9,B10,P11
可以看出,頭序列的出點(diǎn)必須在I或P幀前面(左邊)即第二個(gè)B幀后面(右邊),如果我們從B幀前面(左邊)斷開,則從顯示順序上看兩個(gè)P幀或I與P幀之間顯示時(shí)間上就不連續(xù),這一顯示時(shí)間段內(nèi)的圖像內(nèi)容就不完整,出現(xiàn)一個(gè)個(gè)不規(guī)則的黑洞。
對(duì)于尾序列(切入)就必須從I幀前面(左邊)斷開,這是由于對(duì)于I幀后面(右邊)的所有幀都直接或是間接的用到了I幀作為參考幀,如果沒有I幀,則其后面(右邊)所有幀均無法正確顯示,而出現(xiàn)馬賽克現(xiàn)象。為了避免解碼緩沖區(qū)下溢,本文采用向前查找的方法選取適合幀,如圖3所示。
圖3 尾序列未收到拼接命令時(shí)
在未進(jìn)行切換時(shí),在程序中為每路PS流開辟一塊內(nèi)存,這塊內(nèi)存可以保存每路流中當(dāng)前這一組的所有數(shù)據(jù)幀,在未接收到拼接命令時(shí),讀取內(nèi)存中最近時(shí)間的一幀放入解碼緩沖區(qū)中進(jìn)行解碼。
當(dāng)尾序列接收到拼接命令后,如圖4所示,讀取幀立刻跳轉(zhuǎn)到這一組的第一幀(I幀),放入解碼緩沖區(qū)中,同時(shí)對(duì)此I幀解碼時(shí)間和顯示時(shí)間做出相應(yīng)的調(diào)整。已知頭序列最后一幀B10的解碼時(shí)間戳為DTS1,顯示時(shí)間戳為PTS1,則為達(dá)到前后幀在解碼時(shí)間上的連續(xù),設(shè)置下一幀即尾序列第一幀I2的DTS2為DTS1+1×90 00025,其后所有幀均以此類推。從顯示次序上看,頭序列最后顯示的一幀為P11幀,則其顯示時(shí)間為PTS1+1×90 00025。對(duì)于尾序列第一個(gè)顯示幀為B幀,則其顯示時(shí)間為PTS1+1×90 00025×2,其后以此類推,這樣從顯示時(shí)間上也就構(gòu)成了連續(xù)。值得注意的是,對(duì)于組頭標(biāo)中closed[CD#*2]gop=0的組中,I幀后面的兩個(gè)B幀也無法顯示,他們要用到上一組的幀為參考,所以也應(yīng)該將其去掉,否則有馬賽克出現(xiàn),我們將組頭標(biāo)中參數(shù)broken[CD#*2]link=1即可,對(duì)于閉組無需考慮。
圖4 尾序列接收到拼接命令時(shí)
為了避免多次切換中vbv[CD#*2]delay前后波動(dòng)過大而造成的緩沖區(qū)溢出,還必須對(duì)每一幀的vbv[CD#*2]delay進(jìn)行調(diào)整。由式(3)可得vbv[CD#*2]delay(n-1)的值:
由式(3)-式(4)得:
vbv[CD#*2]delay(n)-vbv[CD#*2]delay(n-1)=f25-Dn-1×fR[JY](5)
這樣我們可以看出vbv[CD#*2]delay(n)的變化只跟vbv[CD#*2]delay(n-1)和Dn-1有關(guān),所以可以根據(jù)頭序列最后一幀計(jì)算出尾序列中每一幀新的vbv[CD#*2]delay值。
5 實(shí)驗(yàn)分析
如表1所示已知頭序列拼接幀的PTS值,且其類型為B,所以其DTS=PTS=42 063 600,進(jìn)而可計(jì)算尾序列拼接幀的DTS=42 063 600+1×90 00025=42 067 200,從而取代原來的47 618 400,依此類推可以在此基礎(chǔ)上計(jì)算出以后每一幀的DTS值,再通過DTS得到每一幀的PTS值,若為I或P幀,則其PTS=DTS+3 600×3,若為B幀則PTS=DTS,這樣使頭尾序列在解碼時(shí)間和顯示時(shí)間上達(dá)到連續(xù)。
表1 拼接參數(shù)
然后利用上面的公式,對(duì)vbv[CD#*2]delay進(jìn)行調(diào)整。如圖5所示,黑線代表頭序列中拼接幀的附近的vbv[CD#*2]delay值,紅線代表未調(diào)整的尾序列中拼接幀的vbv[CD#*2]delay值,藍(lán)線代表調(diào)整后的拼接幀的vbv[CD#*2]delay值。從圖中可以看出,在拼接點(diǎn)附近,紅線vbv[CD#*2]delay值有一個(gè)突增,變化率Δvbv[CD#*2]delay相對(duì)于上一幀明顯增大,調(diào)整后的藍(lán)線的Δvbv[CD#*2]delay與上一幀趨于一致。通過計(jì)算可求得相對(duì)增量Δvbv[CD#*2]delay′490,數(shù)據(jù)增量Δbits=49090 000×1 120 0006 098 b/s,即每切換一次緩沖區(qū)中就會(huì)增加6 098 b/s的數(shù)據(jù),通過圖中可以看出,這一增量會(huì)疊加到以后的每一幀中,所以進(jìn)行vbv[CD#*2]delay調(diào)整很有必要。
圖5 vbv[CD#*2]delay歸一參數(shù)
6 結(jié) 語
本文主要在緩沖區(qū)充盈度方面做出了改善,通過在程序中對(duì)已到來的數(shù)據(jù)幀前向即時(shí)查找,避免了傳統(tǒng)方法通過等待適合幀到來后再拼接可能造成的緩沖區(qū)下溢問題,并使拼接操作變得簡便、效果更好,但卻使尾序列拼接幀的播放向前延遲了一組,且播放時(shí)間延遲了480 ms,一般是我們的視覺很難察覺的,還有就是對(duì)拼接幀的解碼延時(shí)間做了新的調(diào)整,使前后一致,避免了緩沖區(qū)的溢出,實(shí)驗(yàn)表明可以達(dá)到很好的視聽效果。
參 考 文 獻(xiàn)
[1]胡旭邁,任金昌.一種基于GOP的MPEG-2媒體流切割與合并方法[J].微型電腦應(yīng)用,2005,21(7):51-53.
[2]程國華,周源華,孫軍.壓縮域MPEG-2視頻流無縫拼接中的碼率控制算法[J].上海交通大學(xué)學(xué)報(bào),2004,38(4):624-627.
[3]譚建國,張丈軍.數(shù)字HDTV TS流無縫拼接技術(shù)研究[J].通信學(xué)報(bào),2004,24(5):119-124.
[4]劉菲菲,石東新,楊盈昀,等.MPEG-2 TS流的拼接問題[J].廣播與電視技術(shù),2004,31(11):41-44.
[5]劉昱,李桂苓.MPEG-2視頻碼流的拼接[J].有線電視技術(shù),2002,9(10):5-6.
[6]孫軍,易彥,程國華.視頻流無縫拼接中的幀轉(zhuǎn)換[J].通信技術(shù),2003(9):1-4.
[7]徐蕾,徐重陽,鄭立新,等.基于MPEG-2文件的合并[J].有線電視技術(shù),2003,10(4):78-80.
作者簡介
馬文建 男,河北保定人,四川大學(xué)碩士研究生。主要研究方向?yàn)樾盘?hào)與信息處理。
衛(wèi)武迪 女,四川成都人,四川大學(xué)電氣信息學(xué)院副教授。
注:本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文。