張森林,蔡甘霖,黃發(fā)仁
(1.福州大學(xué) 先進(jìn)制造學(xué)院,福建 福州 350000;2.福州大學(xué) 物理與信息工程學(xué)院,福建 福州 350000)
在無線網(wǎng)絡(luò)中,因網(wǎng)絡(luò)波動而導(dǎo)致網(wǎng)絡(luò)傳輸中發(fā)生數(shù)據(jù)丟包的情況頻頻出現(xiàn)。例如,移動設(shè)備與路由器距離較遠(yuǎn)或兩者之間存在障礙物時(shí),很容易出現(xiàn)數(shù)據(jù)丟包的現(xiàn)象。根據(jù)文獻(xiàn)[1]的研究結(jié)果,在無線網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)傳輸時(shí),由于各種原因可能會發(fā)生10%以內(nèi)的丟包現(xiàn)象。
目前,可靠傳輸包括自動重發(fā)請求(Automatic Repeat reQuest,ARQ)和前向糾錯(cuò)(Forward Error Correction,F(xiàn)EC)兩種方案。由于傳輸控制協(xié)議(Transmission Control Protocol,TCP)協(xié)議中的重傳即ARQ 所引入的時(shí)延對于具有嚴(yán)格時(shí)延要求的實(shí)時(shí)流視頻是不可接受的,一般采用用戶數(shù)據(jù)報(bào)協(xié)議(User Datagram Protocol,UDP)作為實(shí)時(shí)視頻流的傳輸協(xié)議。但是由于UDP 不可靠,為了保證傳輸?shù)目煽啃裕ǔ捎肍EC。FEC 通過系統(tǒng)地將冗余信息與原始數(shù)據(jù)發(fā)送給客戶端來避免重傳[2]。這些額外的數(shù)據(jù)允許接收方在不需要服務(wù)器進(jìn)一步干預(yù)的情況下重建原始數(shù)據(jù),避免了重傳請求的往返延遲。根據(jù)文獻(xiàn)[3]的研究,利用接收端對視頻幀接收情況的反饋信息,可以用來調(diào)整下一時(shí)刻的傳輸冗余比。文獻(xiàn)[4]則通過應(yīng)用層的速率控制和數(shù)據(jù)包冗余來降低視頻失真率。
以上文獻(xiàn)都是考慮在TCP 協(xié)議下的傳輸模式,沒有考慮UDP 下的視頻傳輸模式。對此,提出一種自適應(yīng)低延時(shí)冗余度的前向糾錯(cuò)機(jī)制,可以根據(jù)網(wǎng)絡(luò)情況確定源包數(shù)量,降低端到端時(shí)延。同時(shí),在網(wǎng)絡(luò)波動時(shí)自適應(yīng)增加或減少冗余包的數(shù)量,以提升視頻傳輸質(zhì)量。具體而言,以最大化視頻質(zhì)量為優(yōu)化目標(biāo),對端到端時(shí)延以帶寬為約束條件進(jìn)行建模。在多變的無線網(wǎng)絡(luò)中,保證約束下端到端時(shí)延的最優(yōu)視頻的傳輸質(zhì)量。
假設(shè)視頻數(shù)據(jù)包傳輸時(shí)第i時(shí)刻端到端的網(wǎng)絡(luò)丟包率為λ,端到端時(shí)延為d,可用帶寬為B。在每一輪的數(shù)據(jù)包傳輸中,發(fā)送端計(jì)算所得源包數(shù)目為m,冗余包數(shù)目為n,前向糾錯(cuò)的冗余度為k。其中,每一個(gè)源包字節(jié)數(shù)為s,數(shù)據(jù)包包頭大小為h,每一輪總發(fā)送的數(shù)據(jù)包個(gè)數(shù)為Stotal。由于冗余包比例與丟包率、端到端時(shí)延相關(guān),提高冗余包比例能夠增大丟包恢復(fù)概率,提升視頻質(zhì)量。但是,提高冗余包比例會增加冗余數(shù)據(jù)量,數(shù)據(jù)包發(fā)送時(shí)延也會相應(yīng)增加,同時(shí)會增大帶寬消耗??梢姡窗l(fā)送數(shù)目及冗余包比例將對端到端時(shí)延和視頻質(zhì)量造成影響?;诖?,通過刻畫帶寬限制和時(shí)延限制獲得較低的端到端時(shí)延及較高的視頻質(zhì)量,并以此為優(yōu)化目標(biāo)尋找最佳源包數(shù)目和冗余包數(shù)目,以提升視頻質(zhì)量,降低端到端時(shí)延。
在該系統(tǒng)視頻數(shù)據(jù)傳輸過程中,數(shù)據(jù)包每一輪的總發(fā)送數(shù)據(jù)包個(gè)數(shù)為
為了避免網(wǎng)絡(luò)發(fā)生擁塞,每個(gè)時(shí)間單位內(nèi)發(fā)送的數(shù)據(jù)包數(shù)量不應(yīng)超過連接的可用帶寬B,因此數(shù)據(jù)包的發(fā)送時(shí)延tsend可以由數(shù)據(jù)包個(gè)數(shù)和帶寬的比值表示。由于數(shù)據(jù)包的傳輸取決于傳輸媒介的傳播速度和傳輸距離,只需要考慮發(fā)送端到接收端的傳播時(shí)延ttransfer。
視頻傳輸?shù)亩说蕉搜舆t主要包括視頻數(shù)據(jù)的處理時(shí)延、發(fā)送時(shí)延、傳播時(shí)延和緩沖區(qū)排隊(duì)時(shí)延,其中處理時(shí)延可以忽略不計(jì)。因此,第i組視頻數(shù)據(jù)在系統(tǒng)傳輸時(shí)的端到端時(shí)延d可以表示為
式中:tqueue為緩沖區(qū)排隊(duì)時(shí)延。
文章采用的糾錯(cuò)碼使用Maymounkov 等[5]發(fā)表文獻(xiàn)中的在線碼,其參數(shù)為ε和q。其中,ε決定了編碼的次優(yōu)程度,即所需恢復(fù)編碼符號的數(shù)量,而q影響解碼的成功概率,兩個(gè)參數(shù)都將影響解碼的復(fù)雜度。根據(jù)相關(guān)文獻(xiàn)評估,ε=0.1,q=3。根據(jù)Maymounkov 等的描述,p個(gè)數(shù)據(jù)包可以由任意一個(gè)p′數(shù)據(jù)包恢復(fù),其概率為
式中:p′=表示必須接受的編碼包的數(shù)目,從而可以高概率恢復(fù)數(shù)據(jù)。對于網(wǎng)絡(luò)丟包率為λ的鏈路,需要發(fā)送N個(gè)數(shù)據(jù)包,即
網(wǎng)絡(luò)視頻傳輸失真主要通過延遲、丟包和抖動來表現(xiàn)。對于視頻質(zhì)量的評價(jià),多用峰值信噪比(Peak Signal to Noise Ratio,PSNR)來體現(xiàn)。PSNR是用于衡量圖像壓縮等領(lǐng)域中信號重建質(zhì)量的度量方法,它常常通過計(jì)算均方誤差(Mean Square Error,MSE)來定義,即
式中:SME為當(dāng)前圖像X和參考圖像Y的MSE,a、b分別為圖像的高度和寬度。進(jìn)一步,可以通過式(6)計(jì)算圖像的PSNR。
文章的優(yōu)化目標(biāo)為在約束的端到端時(shí)延以及帶寬限制內(nèi)通過確定源包和冗余包比例獲得最低的端到端時(shí)延及最優(yōu)的視頻質(zhì)量。優(yōu)化問題可以通過式(7)來解決。
式中:D為視頻傳輸?shù)亩说蕉藭r(shí)延。
網(wǎng)絡(luò)視頻傳輸問題還需要滿足以下約束條件。
式中:Γ 為給定的目標(biāo)延時(shí)范圍,視頻傳輸?shù)亩说蕉藭r(shí)延應(yīng)在給定的目標(biāo)延時(shí)范圍內(nèi)。
式中:M為最大傳輸單元(Maximum Transmission Unit,MTU)的大小。
式中:k為前向糾錯(cuò)的冗余度。
式中:bbugdet為最大的字節(jié)數(shù)預(yù)算,每一次發(fā)送的數(shù)據(jù)包個(gè)數(shù)不能超過此數(shù)值。
文章提出一種兩階段的自適應(yīng)低延遲前向糾錯(cuò)機(jī)制,旨在根據(jù)視頻幀特性和網(wǎng)絡(luò)時(shí)延情況優(yōu)化視頻傳輸?shù)亩说蕉藭r(shí)延,并根據(jù)不同的網(wǎng)絡(luò)狀況動態(tài)調(diào)整冗余比例,從而優(yōu)化視頻傳輸質(zhì)量。該機(jī)制包含兩個(gè)模塊:第一模塊是最佳源包確定算法,用于確定每一輪應(yīng)發(fā)送的源編碼包的數(shù)量;第二模塊是基于丟包率計(jì)算的冗余包比例確定算法,用于動態(tài)設(shè)置前向糾錯(cuò)的冗余包參數(shù)。
從約束條件可以看出,源包的個(gè)數(shù)影響發(fā)送時(shí)延和排隊(duì)時(shí)延,因此在給定最低編碼冗余度的情況下計(jì)算此時(shí)的最佳發(fā)送源包個(gè)數(shù)。首先,輸入帶寬B、傳播時(shí)延ttransfer、初始排隊(duì)時(shí)延tqueue、最低冗余度k和時(shí)延約束Γ,輸出編碼源包數(shù)m。其次,在有源包進(jìn)入編碼緩沖區(qū)時(shí)進(jìn)入循環(huán),此時(shí)開始更新原緩沖區(qū)和編碼緩沖區(qū)的排隊(duì)時(shí)延。排隊(duì)時(shí)延更新為進(jìn)入編碼緩沖區(qū)第一個(gè)包的時(shí)長及原緩沖區(qū)第一個(gè)包的時(shí)延。再次,根據(jù)源包的數(shù)目計(jì)算端到端時(shí)延,根據(jù)模型中的約束判斷是否超過目標(biāo)時(shí)延,若沒有則繼續(xù)循環(huán),源包數(shù)目增加,若超過目標(biāo)實(shí)驗(yàn)則退出循環(huán)。最后,返回所需編碼源包個(gè)數(shù)。
為了能夠在真實(shí)情況下進(jìn)行傳輸,使其在網(wǎng)絡(luò)抖動時(shí)也能夠獲得較高的視頻質(zhì)量,需要根據(jù)網(wǎng)絡(luò)情況對冗余度進(jìn)行調(diào)整。首先,輸入編碼源包數(shù)m、丟包率λ,輸出冗余包數(shù)n。其次,在網(wǎng)絡(luò)傳輸時(shí),多數(shù)時(shí)間內(nèi)網(wǎng)絡(luò)情況都是穩(wěn)定的。測試發(fā)現(xiàn),網(wǎng)絡(luò)丟包率在小于5%的情況下,通過最小的冗余度能夠獲得較高的視頻質(zhì)量,因此在小于此丟包率的情況下,維持其最小冗余度,從而可以保證利用更少的帶寬資源及約定的端到端延時(shí)。若網(wǎng)絡(luò)情況發(fā)生波動,丟包率大于5%,則根據(jù)建立的模型判斷所需的冗余包數(shù)目。再次,為了避免超越帶寬上界,使用視頻幀數(shù)據(jù)包作為探測包,采用實(shí)時(shí)帶寬預(yù)測算法估計(jì)實(shí)際鏈路的物理帶寬。客戶端利用該信息并使用遞歸最小二乘自適應(yīng)濾波器,估計(jì)下一時(shí)刻的鏈路帶寬值,從而獲得此時(shí)的發(fā)送字節(jié)預(yù)算,確定在字節(jié)預(yù)算內(nèi)的冗余包數(shù)量[6]。如果總發(fā)送數(shù)據(jù)包數(shù)目大于字節(jié)預(yù)算,則將發(fā)送包數(shù)目更新為最大預(yù)算字節(jié)數(shù)目,發(fā)送數(shù)據(jù)包個(gè)數(shù)減去源包個(gè)數(shù)即可得到冗余包數(shù)目n。最后,返回冗余包數(shù)目n。
實(shí)驗(yàn)由C++代碼實(shí)現(xiàn)發(fā)送端與接收端。發(fā)送端采用X264 作為視頻編碼器,每個(gè)視頻流每秒30幀進(jìn)行編碼。視頻幀采用實(shí)時(shí)傳輸協(xié)議(Real-time Transport Protocol,RTP)進(jìn)行封包,每個(gè)數(shù)據(jù)包的大小為512 Bytes,包頭大小為42 Bytes。接收端采用FFmpeg 作為視頻解碼器,網(wǎng)絡(luò)狀況模擬采用Linux 操作系統(tǒng)自帶的TC 流量控制功能模塊及防火墻來實(shí)現(xiàn),視頻文件為2 000 幀。
視頻數(shù)據(jù)包組數(shù)每一時(shí)刻的端到端傳輸過程中的時(shí)延數(shù)據(jù),如圖1 所示。從圖1 可以看出,文章所提出的算法時(shí)延大多數(shù)情況下都低于約束的端到端時(shí)延,而FIX-FEC 方案的時(shí)延情況均高于約束的端到端時(shí)延。相較于FIX-FEC,文章方案考慮了視頻幀特性和網(wǎng)絡(luò)傳輸過程中的時(shí)延情況,自適應(yīng)選擇源視頻包的發(fā)包策略,因此大幅降低了視頻傳輸?shù)亩说蕉藭r(shí)延。
圖1 總體端到端時(shí)延對比圖
不同丟包率下PSNR 的比較情況,如圖2 所示。從圖2 可以看出,A-FEC 方案與FIX-FEC 方案相比,PSNR 情況并無太大差異,這是因?yàn)樗惴? 僅考慮根據(jù)網(wǎng)絡(luò)時(shí)延、幀時(shí)延等情況調(diào)整源編碼包數(shù)目,從而降低端到端時(shí)延,并沒有根據(jù)網(wǎng)絡(luò)丟包率情況調(diào)整FEC 的冗余度,PSNR 無明顯差異,符合實(shí)驗(yàn)預(yù)期。因此,提出算法2 對算法1 進(jìn)行拓展,根據(jù)網(wǎng)絡(luò)丟包率情況動態(tài)調(diào)整冗余度,從而大幅提高PSNR。
圖2 不同丟包率下PSNR 對比圖
在無線網(wǎng)絡(luò)傳輸?shù)倪^程中,受各種因素影響,尤其是UDP 的不可靠特性,易發(fā)生丟包情況,因此,如何在動態(tài)變化的網(wǎng)絡(luò)環(huán)境下增強(qiáng)UDP 下視頻傳輸?shù)目煽啃砸恢笔秦酱鉀Q的難點(diǎn)。針對這一問題,首先對前向糾錯(cuò)中的端到端時(shí)延及冗余比例確定問題進(jìn)行建模,并提出一種自適應(yīng)低時(shí)延的前向糾錯(cuò)機(jī)制AL-FEC。該機(jī)制首先根據(jù)網(wǎng)絡(luò)時(shí)延、幀時(shí)延等情況動態(tài)調(diào)整編碼源包的數(shù)目,然后針對不同的網(wǎng)絡(luò)狀況動態(tài)調(diào)整冗余包比例,以降低端到端時(shí)延并提高視頻傳輸質(zhì)量。大量實(shí)驗(yàn)證明,與傳統(tǒng)的前向糾錯(cuò)機(jī)制相比,文章提出的自適應(yīng)低延時(shí)的前向糾錯(cuò)方案能夠大幅降低視頻傳輸?shù)亩说蕉藭r(shí)延,并且大幅提高視頻的傳輸質(zhì)量。