摘 要:主要是針對從視頻采集卡中出來的兩路實時MPEG-2 PS流進行了拼接研究及實現。在拼接過程中,通過正確選取拼接點、對系統參數如PTS,DTS等進行調整達到了視頻流的連續播放效果,通過對視頻幀的即時前向查找,避免了傳統方法下通過等待查找可能造成的緩沖器下溢問題,并通過vbv[CD#*2]delay參數的前后關聯性,解決了緩沖器的上溢等問題,進而避免了拼接點處經常會出現的馬賽克、花屏、黑屏及閃爍等問題。
關鍵詞:MPEG-2 PS流;拼接點;即時前向查找;vbv[CD#*2]delay
中圖分類號:TN919.8文獻標識碼:A
文章編號: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 引 言
傳統的視頻處理都是在空間域中進行的,但是實際傳輸的碼流都是壓縮形式的,所以對壓縮碼流的處理必須先將其解壓到空間域,在空間域中處理完成后,再將其重新進行壓縮,其中壓縮/解壓縮所帶來的運算量是非常大的,對于計算機來說要耗費大量的內存和CUP資源,很難實現實時的接收處理,因此實時視頻拼接技術成為其中的關鍵技術之一。
由于數字電視技術的迅速發展,多節目流的實時無縫拼接技術成為多媒體領域的關鍵技術之一,其主要是針對傳輸流(TS)的研究。但在一些以PS流為主的交互式多媒體領域,如視頻監控、多媒體教室、視頻點播、視頻會議等,實時無縫拼接技術同樣有著重要的應用。
2 解碼器的解碼原理
PS流在P-STD(Program-System Target Decoder)中解碼的過程如圖1所示。從多路復合流中取出的數據放入系統目標解碼器中,通過分流得到各路基本流數據,分別放入各自對應的任意解碼緩沖區內。其中出現在復合流中的單元、系統或包頭標中的字節內容不發送到任意緩沖區中,但可以用于控制系統,例如:緩沖區的大小,在序列頭標中得到確定。
圖1 P-STD結構圖
圖1中在解碼時間tdn(j),訪問單元的所有數據以某一次序立即被刪除,即刪除放入緩沖區時間最長的數據An(j)。在視頻基本流中,圖像組和放在圖像前的序列頭數據在同一時刻被刪除。對于視頻序列的第一個編碼圖像,所有0位或放在序列頭的最前面的那一字節在同一時刻被刪除。注意,這僅適合視頻序列的第一個圖像,而不適合視頻序列的序列頭中的其他部分。當存取單元(訪問單元)從緩沖區中刪除時,他被立即放入解碼器D1~Dn中進行立即解碼,在送到系統目標解碼器的輸出觀察程序之前,有可能在重定序緩沖區O1~On中延遲,以保證圖像幀按正確的順序進行顯示。
3 視頻校驗緩沖器(VBV)
VBV是一個假象的解碼器,他在概念上與編碼器的輸出相聯結。他等同于P-STD中的視頻緩沖區部分。圖2給出了恒速率編碼的視頻位流VBV緩沖區占有量說明圖。其中,vbv[CD#*2]delay(n)為第n幀的vbv[CD#*2]delay值,表示幀圖像起始碼的最后一個字節到達解碼緩沖器后,在對該幀解碼前還需要等待的90 kHz系統時鐘周期數,vbv[CD#*2]delay用來在播放開始時設置解碼緩沖器的的初始分配,即分配一塊多大的內存來接收圖像數據,通過調整編碼器參數vbv[CD#*2]delay可以保證緩沖器不發生溢出。其中:
vbv[CD#*2]delay(n)=Bn×fR[JY](1)
Bn是位于圖像n即將被解碼之前,除去圖像n數據元素之前的任何GOP頭數據、序列頭數據和picture[CD#*2]start[CD#*2]code后的VBV 的占有情況;R為編碼比特率;f是系統時鐘頻率為90 kHz。
我們可以設VBV在第一幀編碼前的初始狀態為init[CD#*2]bit,幀率為picture[CD#*2]rate,Dn為從vbv[CD#*2]delay(n)參數最后一個字節到下一幀此位置時等待的數據長度。根據定義可得:
Bn=init[CD#*2]bit+n×Rpicture[CD#*2]rate-(∑n-1i=0Di+b0)[JY](2)
所以代入式(1)可得:
圖2 VBV緩沖區占有量說明
4 實時流的拼接過程
為了拼接前后的幀正確顯示,而不出現馬賽克、花屏,我們必須先進行幀選擇。設一組頭序列(切出)的編碼順序為:
I2,B0,B1,P5,B3,B4,P8,B6,B7,P11,B9,B10
則其對應的顯示幀順序即為:
B0,B1,I2,B3,B4,P5,B6,B7,P8,B9,B10,P11
可以看出,頭序列的出點必須在I或P幀前面(左邊)即第二個B幀后面(右邊),如果我們從B幀前面(左邊)斷開,則從顯示順序上看兩個P幀或I與P幀之間顯示時間上就不連續,這一顯示時間段內的圖像內容就不完整,出現一個個不規則的黑洞。
對于尾序列(切入)就必須從I幀前面(左邊)斷開,這是由于對于I幀后面(右邊)的所有幀都直接或是間接的用到了I幀作為參考幀,如果沒有I幀,則其后面(右邊)所有幀均無法正確顯示,而出現馬賽克現象。為了避免解碼緩沖區下溢,本文采用向前查找的方法選取適合幀,如圖3所示。
圖3 尾序列未收到拼接命令時
在未進行切換時,在程序中為每路PS流開辟一塊內存,這塊內存可以保存每路流中當前這一組的所有數據幀,在未接收到拼接命令時,讀取內存中最近時間的一幀放入解碼緩沖區中進行解碼。
當尾序列接收到拼接命令后,如圖4所示,讀取幀立刻跳轉到這一組的第一幀(I幀),放入解碼緩沖區中,同時對此I幀解碼時間和顯示時間做出相應的調整。已知頭序列最后一幀B10的解碼時間戳為DTS1,顯示時間戳為PTS1,則為達到前后幀在解碼時間上的連續,設置下一幀即尾序列第一幀I2的DTS2為DTS1+1×90 00025,其后所有幀均以此類推。從顯示次序上看,頭序列最后顯示的一幀為P11幀,則其顯示時間為PTS1+1×90 00025。對于尾序列第一個顯示幀為B幀,則其顯示時間為PTS1+1×90 00025×2,其后以此類推,這樣從顯示時間上也就構成了連續。值得注意的是,對于組頭標中closed[CD#*2]gop=0的組中,I幀后面的兩個B幀也無法顯示,他們要用到上一組的幀為參考,所以也應該將其去掉,否則有馬賽克出現,我們將組頭標中參數broken[CD#*2]link=1即可,對于閉組無需考慮。
圖4 尾序列接收到拼接命令時
為了避免多次切換中vbv[CD#*2]delay前后波動過大而造成的緩沖區溢出,還必須對每一幀的vbv[CD#*2]delay進行調整。由式(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有關,所以可以根據頭序列最后一幀計算出尾序列中每一幀新的vbv[CD#*2]delay值。
5 實驗分析
如表1所示已知頭序列拼接幀的PTS值,且其類型為B,所以其DTS=PTS=42 063 600,進而可計算尾序列拼接幀的DTS=42 063 600+1×90 00025=42 067 200,從而取代原來的47 618 400,依此類推可以在此基礎上計算出以后每一幀的DTS值,再通過DTS得到每一幀的PTS值,若為I或P幀,則其PTS=DTS+3 600×3,若為B幀則PTS=DTS,這樣使頭尾序列在解碼時間和顯示時間上達到連續。
表1 拼接參數
然后利用上面的公式,對vbv[CD#*2]delay進行調整。如圖5所示,黑線代表頭序列中拼接幀的附近的vbv[CD#*2]delay值,紅線代表未調整的尾序列中拼接幀的vbv[CD#*2]delay值,藍線代表調整后的拼接幀的vbv[CD#*2]delay值。從圖中可以看出,在拼接點附近,紅線vbv[CD#*2]delay值有一個突增,變化率Δvbv[CD#*2]delay相對于上一幀明顯增大,調整后的藍線的Δvbv[CD#*2]delay與上一幀趨于一致。通過計算可求得相對增量Δvbv[CD#*2]delay′490,數據增量Δbits=49090 000×1 120 0006 098 b/s,即每切換一次緩沖區中就會增加6 098 b/s的數據,通過圖中可以看出,這一增量會疊加到以后的每一幀中,所以進行vbv[CD#*2]delay調整很有必要。
圖5 vbv[CD#*2]delay歸一參數
6 結 語
本文主要在緩沖區充盈度方面做出了改善,通過在程序中對已到來的數據幀前向即時查找,避免了傳統方法通過等待適合幀到來后再拼接可能造成的緩沖區下溢問題,并使拼接操作變得簡便、效果更好,但卻使尾序列拼接幀的播放向前延遲了一組,且播放時間延遲了480 ms,一般是我們的視覺很難察覺的,還有就是對拼接幀的解碼延時間做了新的調整,使前后一致,避免了緩沖區的溢出,實驗表明可以達到很好的視聽效果。
參 考 文 獻
[1]胡旭邁,任金昌.一種基于GOP的MPEG-2媒體流切割與合并方法[J].微型電腦應用,2005,21(7):51-53.
[2]程國華,周源華,孫軍.壓縮域MPEG-2視頻流無縫拼接中的碼率控制算法[J].上海交通大學學報,2004,38(4):624-627.
[3]譚建國,張丈軍.數字HDTV TS流無縫拼接技術研究[J].通信學報,2004,24(5):119-124.
[4]劉菲菲,石東新,楊盈昀,等.MPEG-2 TS流的拼接問題[J].廣播與電視技術,2004,31(11):41-44.
[5]劉昱,李桂苓.MPEG-2視頻碼流的拼接[J].有線電視技術,2002,9(10):5-6.
[6]孫軍,易彥,程國華.視頻流無縫拼接中的幀轉換[J].通信技術,2003(9):1-4.
[7]徐蕾,徐重陽,鄭立新,等.基于MPEG-2文件的合并[J].有線電視技術,2003,10(4):78-80.
作者簡介
馬文建 男,河北保定人,四川大學碩士研究生。主要研究方向為信號與信息處理。
衛武迪 女,四川成都人,四川大學電氣信息學院副教授。
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。