唐貴進(jìn),朱秀昌
(南京郵電大學(xué) 江蘇省圖像處理與圖像通信重點(diǎn)實(shí)驗(yàn)室,江蘇 南京 210003)
責(zé)任編輯:哈宏疆
隨著通信技術(shù)的不斷發(fā)展,現(xiàn)有網(wǎng)絡(luò)的帶寬和傳輸質(zhì)量都得到了很大的提高,然而丟包問(wèn)題依然是通信網(wǎng)絡(luò)研究領(lǐng)域中不可避免的問(wèn)題[1-2]。一般來(lái)說(shuō),當(dāng)數(shù)據(jù)包在網(wǎng)絡(luò)上傳輸時(shí),發(fā)生丟包的原因大致有兩個(gè):擁塞丟包與無(wú)線鏈路差錯(cuò)丟包。前者發(fā)生的主要原因是網(wǎng)絡(luò)上數(shù)據(jù)傳輸量過(guò)大,導(dǎo)致網(wǎng)絡(luò)設(shè)備傳送處理不及時(shí),使得設(shè)備隊(duì)列緩沖區(qū)溢出而丟包。這往往造成突發(fā)丟包(即連續(xù)丟包)。后者的發(fā)生又大致分為兩種情況,一種是受隨機(jī)差錯(cuò)(如高斯白噪聲)的影響從而造成隨機(jī)丟包,另一種則是由于移動(dòng)信號(hào)的多徑和快衰落等從而造成連續(xù)丟包。
H.264是國(guó)際電信聯(lián)盟ITU-T和國(guó)際標(biāo)準(zhǔn)化組織ISO聯(lián)合開(kāi)發(fā)的新一代視頻壓縮編碼標(biāo)準(zhǔn),JM(jointmod?el)[3]是其官方測(cè)試源代碼,它實(shí)現(xiàn)了H.264的所有特性。H.264碼流文件有兩種格式,分別為附錄B格式和RTP打包格式,分別用于模擬數(shù)據(jù)存儲(chǔ)在介質(zhì)(如DVD光盤)上和網(wǎng)絡(luò)傳輸環(huán)境中。對(duì)于前者,一般不必考慮數(shù)據(jù)丟失,而對(duì)于后者,由于網(wǎng)絡(luò)的不確定性,往往有數(shù)據(jù)包丟失[4-6]。為了研究丟包對(duì)重建視頻質(zhì)量的影響,從JM13.0模型開(kāi)始,增加了名稱為rtp_loss的丟包工具,可以對(duì)RTP打包格式的H.264碼流進(jìn)行丟包。然而,本文在模擬丟包時(shí)發(fā)現(xiàn),此丟包工具存在如下3個(gè)問(wèn)題:1)實(shí)際的丟包率與所設(shè)定的預(yù)期值經(jīng)常會(huì)有偏差,且偏差在百分之十以上,當(dāng)RTP數(shù)據(jù)包較少時(shí),偏差將更為明顯;2)只能模擬隨機(jī)丟包,不能模擬突發(fā)丟包;3)在丟包率不變的情況下,對(duì)同一個(gè)碼流進(jìn)行多次丟包實(shí)驗(yàn),則每次實(shí)驗(yàn)丟棄包的序號(hào)總是一樣的,達(dá)不到隨機(jī)的效果。本文將對(duì)以上3個(gè)問(wèn)題進(jìn)行分析并提出改進(jìn)方法。
JM模型中對(duì)網(wǎng)絡(luò)抽象層單元(Net Abstract Layer Unit,NALU)的RTP封裝方案稱為“簡(jiǎn)單包”方案(即直接將一個(gè)NALU放進(jìn)一個(gè)RTP包),而沒(méi)有采用復(fù)雜的RFC3984[7]的方案(依據(jù)RFC3984,可以將多個(gè)NALU放進(jìn)一個(gè)RTP包或者將一個(gè)NALU拆開(kāi)放進(jìn)多個(gè)RTP包中)。對(duì)于RTP包,采用RFC3550【8】格式封裝,具體如圖1所示。
圖1 把一個(gè)NALU封裝進(jìn)一個(gè)RTP包
對(duì)于已經(jīng)封裝好的RTP包,JM中對(duì)其又進(jìn)行了再次封裝(這里將此封裝樣式稱為寫文件包),然后寫入文件中。此處再次封裝的格式為(見(jiàn)圖2):先寫4 byte的包長(zhǎng),之后是4 byte的時(shí)間戳,但這個(gè)時(shí)間戳是固定值,恒為-1(即0XFF FF FF FF),最后是數(shù)據(jù)體(即RTP包)。每個(gè)RTP包寫入文件的封裝依此類推。
圖2 把RTP包再次封裝
1.2.1 丟包算法流程
在JM的丟包算法中,包含3個(gè)必需參數(shù)和1個(gè)可選參數(shù),其中3個(gè)必需參數(shù)為:參數(shù)1表示H.264的碼流文件,參數(shù)2表示生成的有丟包的H.264文件,參數(shù)3表示設(shè)定的丟包率,1個(gè)可選參數(shù)表示從碼流文件的第多少個(gè)包后可以開(kāi)始丟包,即一開(kāi)始保留多少包不允許丟棄。具體流程如圖3所示。
1.2.2 問(wèn)題分析
對(duì)于實(shí)際的丟包率與所設(shè)定的預(yù)期值經(jīng)常會(huì)有偏差問(wèn)題,從圖3中可以看出,JM模型的丟包算法是基于大數(shù)定律的,其內(nèi)容就是在試驗(yàn)不變的條件下,重復(fù)試驗(yàn)多次,隨機(jī)事件的頻率近似于它的概率。結(jié)合此算法,就是丟包的數(shù)目應(yīng)該等于設(shè)定的丟包率。而大數(shù)定理的基本條件就是實(shí)驗(yàn)要重復(fù)多次,也就是說(shuō)數(shù)據(jù)包的數(shù)目要盡可能的多,一旦H.264碼流文件中RTP包數(shù)目較少,則實(shí)際的丟包數(shù)往往與設(shè)定的不能一致。RTP包的數(shù)目越少,這種不一致的現(xiàn)象表現(xiàn)得越明顯。
對(duì)于不能模擬突發(fā)丟包問(wèn)題則比較簡(jiǎn)單,從圖3的流程中可以看出,此算法中沒(méi)有此功能。
至于在相同丟包率條件下對(duì)同一個(gè)碼流進(jìn)行多次丟包時(shí)丟棄包的序號(hào)相同的問(wèn)題可以這樣解釋:在圖3中有一個(gè)“產(chǎn)生一個(gè)0~100之間隨機(jī)數(shù)”的功能模塊,其在具體代碼實(shí)現(xiàn)過(guò)程中直接調(diào)用的rand()函數(shù)。而rand()函數(shù)在生成隨機(jī)數(shù)序列時(shí),需要一個(gè)稱為“隨機(jī)數(shù)種子”的參數(shù),如果每次實(shí)驗(yàn)時(shí)這個(gè)參數(shù)值一樣,則每次實(shí)驗(yàn)產(chǎn)生的隨機(jī)數(shù)序列也將一樣,反之,則不一樣。如果未設(shè)定隨機(jī)數(shù)種子,rand()函數(shù)在調(diào)用時(shí)會(huì)自動(dòng)設(shè)隨機(jī)數(shù)種子為1,而JM丟包算法的代碼中恰恰沒(méi)有設(shè)定隨機(jī)數(shù)種子,因此,每次實(shí)驗(yàn)時(shí)種子參數(shù)值都相同,從而導(dǎo)致在丟包率不變的情況下,對(duì)同一個(gè)碼流做多次丟包實(shí)驗(yàn),其每次產(chǎn)生的丟包序列的序號(hào)將完全一樣。
鑒于以上分析,提出了本文對(duì)解決這3個(gè)問(wèn)題的改進(jìn)算法。
針對(duì)前面所述3個(gè)問(wèn)題,筆者提出了解決辦法,現(xiàn)分別敘述之:
1)對(duì)于丟包數(shù)不準(zhǔn)確,采用了先計(jì)算出丟包數(shù),再嚴(yán)格按照丟包數(shù)隨機(jī)丟包的方法。具體步驟如下:
步驟(1):首先讀取H.264碼流文件,統(tǒng)計(jì)其寫文件包的總數(shù)N總。
步驟(2):根據(jù)設(shè)定的丟包率RLS和N總,確定丟包數(shù)N L。
步驟(3):產(chǎn)生一個(gè)Nstart-N總之間的隨機(jī)數(shù)ilost,并置序號(hào)為ilost的寫文件包的標(biāo)志位為“l(fā)ost”標(biāo)志,其中
步驟(4):重復(fù)步驟3)的過(guò)程(如果新產(chǎn)生的隨機(jī)數(shù)與先前產(chǎn)生的隨機(jī)數(shù)相同或者相近,則重新產(chǎn)生隨機(jī)數(shù),以避免同一個(gè)數(shù)據(jù)包要被丟棄兩次以及使丟包的序號(hào)看起來(lái)更加的隨機(jī)),直至共設(shè)置了NL個(gè)“l(fā)ost”標(biāo)志位。
步驟(5):依次讀取H.264碼流文件的寫文件包,如果此包的標(biāo)志位為“l(fā)ost”,則丟棄該包,否則將該包寫入到丟包的H.264碼流文件中,直至文件讀取結(jié)束。
2)對(duì)于突發(fā)丟包,采用Gilbert-Elliott模型[9](簡(jiǎn)稱GE模型,見(jiàn)圖4)生成。
在GE模型中,PG表示當(dāng)傳輸通道處于“好”(G)狀態(tài)時(shí)發(fā)生數(shù)據(jù)包遺失的概率;PB表示當(dāng)傳輸通道處于“壞”(B)狀態(tài)時(shí)發(fā)生數(shù)據(jù)包遺失的概率;PGB代表傳輸通道的狀態(tài)從好變成壞的概率;PBG代表傳輸通道的狀態(tài)從壞變成好的概率。在穩(wěn)態(tài)的情形下,傳輸通道處于“好”的狀態(tài)和“壞”的狀態(tài)的概率分別為
因此,對(duì)于GE模型而言,整體的平均丟包率為
3)對(duì)于每次實(shí)驗(yàn)結(jié)果都一致的問(wèn)題,采取給rand函數(shù)每次實(shí)驗(yàn)時(shí)賦不同隨機(jī)數(shù)種子的方法。這個(gè)賦值工作在程序中借助srand函數(shù)完成,調(diào)用srand函數(shù)將會(huì)把其參數(shù)值傳遞給rand函數(shù)的種子。而為了讓每次運(yùn)行程序的種子值是不同的,可以用time函數(shù)的返回值作為srand函數(shù)的參數(shù),time函數(shù)返回從1970年1月1日零時(shí)零分零秒到目前為止(即程序執(zhí)行時(shí))所經(jīng)過(guò)的時(shí)間,單位為秒。因?yàn)槊看芜\(yùn)行程序的時(shí)間是不同的,從而保證了每次實(shí)驗(yàn)時(shí)種子值是不同的,也就保證了每次實(shí)驗(yàn)生成的丟包序號(hào)的不一樣。
下面采用JM15.0對(duì)視頻foreman.cif進(jìn)行編碼,編碼結(jié)構(gòu)為IPPP…,GoP大小為15,QPISlice和QPPSlice均為28,RTP打包方式,每個(gè)包長(zhǎng)設(shè)為100 byte。具體測(cè)得的實(shí)際丟包率如表1所示。
表1 不同幀數(shù)、不同丟包率下本文算法與原算法的實(shí)際丟包率
根據(jù)表1的數(shù)據(jù),計(jì)算出兩個(gè)算法的實(shí)際丟包率RLA與設(shè)定丟包率RLS的差值RΔ,計(jì)算公式為
將差值RΔ圖形化表示,結(jié)果如圖5所示。
由圖4可見(jiàn),JM中算法的實(shí)際丟包率與設(shè)定丟包率之間的差值較大,而且當(dāng)幀數(shù)較少(即相應(yīng)的編碼生成的數(shù)據(jù)包較少)時(shí),差值往往更大。而本文算法的差值則遠(yuǎn)小于原來(lái)的算法,差值絕大多數(shù)都圍繞在0的附近。
接下來(lái)測(cè)試突發(fā)丟包模塊以及每次實(shí)驗(yàn)所得序列是否不同。以100幀foreman.cif碼流為測(cè)試對(duì)象,設(shè)定丟包率為1%。丟包結(jié)果如表2所示。
表2 不同實(shí)驗(yàn)下本文算法與原算法的丟包序列
從表2中可以看出,本文的突發(fā)丟包模塊能夠正確地模擬連續(xù)的丟包。同時(shí),原算法每次實(shí)驗(yàn)時(shí)丟包序列都一樣,而本文算法,不管是隨機(jī)丟包還是突發(fā)丟包,每次實(shí)驗(yàn)結(jié)果都不一樣,從而達(dá)到了“隨機(jī)”的目的。
盡管網(wǎng)絡(luò)通信技術(shù)發(fā)展迅猛,但是數(shù)據(jù)丟包始終是其無(wú)法回避的問(wèn)題。本文對(duì)H.264建議的參考軟件JM模型中丟包算法進(jìn)行了研究,分析了其存在的問(wèn)題,并提出了相應(yīng)的解決辦法。實(shí)驗(yàn)結(jié)果表明,本文的算法能夠比較精確地進(jìn)行隨機(jī)丟包和突發(fā)丟包,并具有隨機(jī)的效果。
[1]李秀敏,王立,李桂苓.數(shù)字電視傳送流丟包和丟包率研究[J].電視技術(shù),2005,29(6):43-45.
[2]盧劉明,陸肖元.基于網(wǎng)絡(luò)丟包的網(wǎng)絡(luò)視頻質(zhì)量評(píng)估[J].中國(guó)圖象圖形學(xué)報(bào),2009,14(1):52-58.
[3]H.264/AVC Reference Software[EB/OL].[2010-06-01].http://iphome.hhi.de/suehring/tml/.
[4]LIN T-L,COSMAN P C,REIBMAN A R.Perceptual Impactof Bursty Versus Isolated Packet Losses in H.264 Compressed Video[C]//Proc.15th IEEE International Conference on Image Processing.[S.l.]:IEEE Press,2008:2780-2783.
[5]KANUMURI S,SUBRAMANIAN S G,COSMAN P C,et al.Predicting H.264 packetloss visibility using a generalized linear model[C]//IEEE International Conference on Image Processing,2006.[S.l.]:IEEE Press,2006:2245-2248.
[6]楊林濤,江昊,郭成城,等.基于Markov鏈Packet-Level的VANET差錯(cuò)預(yù)測(cè)模型及性能預(yù)估[J].電子學(xué)報(bào),2009,37(10):2333-2337.
[7]WENGER S,HANNUKSELA M M,STOCKHAMMER T,et al.RTP payload formatfor H.264 video:RFC3984[S].2005.
[8]SCHULZRINNE H,CASNER S,F(xiàn)REDERICK R,etal.RTP:A transport protocolforreal-time applications:RFC 3550[S].2003.
[9]EBERT J-P,WILLIG A.A gilbert-elliotbiterrormodeland the efficient use in packetlevelsimulation:TKN-99-002[R].Berlin:TKN,1999.