楊 亮,鄧春健,宋喜佳
(1.電子科技大學(xué)中山學(xué)院 計(jì)算機(jī)學(xué)院,廣東 中山 528402;2.廣東工業(yè)大學(xué) 自動(dòng)化學(xué)院,廣東 廣州 510006)
在近年來(lái)隨著科技的快速發(fā)展以及智能設(shè)備的普及,人們工作生活中的多媒體設(shè)備已經(jīng)從傳統(tǒng)的以個(gè)人電腦和電視機(jī)為主,轉(zhuǎn)變成桌面電腦、智能手機(jī)、平板電腦和電視機(jī)共同存在[1]。屏與屏之間的內(nèi)容共享不再僅僅局限于計(jì)算機(jī)與計(jì)算機(jī)之間,更多會(huì)發(fā)生在諸如計(jì)算機(jī)與智能電視、智能電視與手持式設(shè)備等多種智能設(shè)備之間,然而現(xiàn)有一些成熟的屏幕內(nèi)容共享系統(tǒng),例如X系統(tǒng)[2](the X system)、微軟的遠(yuǎn)程桌面協(xié)議(Microsoft Remote Desktop Protocol,RDP)、虛擬網(wǎng)絡(luò)計(jì)算[3](Virtual Network Computing),主要針對(duì)計(jì)算機(jī)與計(jì)算機(jī)之間的屏幕共享,另一方面,傳統(tǒng)屏幕內(nèi)容分享系統(tǒng)主要用于文字、圖片等內(nèi)容的共享,目前所采用的壓縮編碼方式對(duì)帶寬要求過(guò)大,并不適合視頻內(nèi)容的共享,而 H.264[4]具有更好的壓縮性能以及面象網(wǎng)絡(luò)傳輸?shù)摹坝押眯浴保?],是目前應(yīng)用最廣泛的視頻編碼標(biāo)準(zhǔn)之一[6]。
針對(duì)以上問(wèn)題,本文介紹了一種基于嵌入式平臺(tái)大屏幕分享系統(tǒng)的設(shè)計(jì)方法與具體實(shí)現(xiàn),該系統(tǒng)基于場(chǎng)景識(shí)別的碼率自適應(yīng)調(diào)整算法,能夠根據(jù)網(wǎng)絡(luò)擁塞狀況及當(dāng)前屏幕的應(yīng)用場(chǎng)景對(duì)H.264碼率進(jìn)行自適應(yīng)調(diào)整,以達(dá)到節(jié)約帶寬、提高畫質(zhì)的目的,另一方面,為節(jié)約成本并使系統(tǒng)更加小巧與便攜,服務(wù)器端基于嵌入式ARM平臺(tái)。
本系統(tǒng)由客戶端與服務(wù)器端兩部分構(gòu)成,客戶端運(yùn)行于需要進(jìn)行屏幕內(nèi)容分享的機(jī)器上,一般是筆記本電腦、平板等個(gè)人計(jì)算機(jī),主要完成屏幕內(nèi)容的獲取、壓縮編碼及傳輸?shù)裙ぷ鳎环?wù)器端運(yùn)行于嵌入式平臺(tái),采用的就是一款帶圖形加速功能的嵌入式多媒體應(yīng)用處理器BCM2835作為服務(wù)器端的主控芯片,上面搭載嵌入式Linux操作系統(tǒng),主要完成內(nèi)容的接收、解碼、顯示等功能。
傳統(tǒng)應(yīng)用較廣泛的vnc軟件采用的是RFB協(xié)議實(shí)現(xiàn)屏幕內(nèi)容的共享功能,具有良好的跨平臺(tái)性,但當(dāng)屏幕內(nèi)容變化大時(shí),例如在播放視頻時(shí),所占有帶寬將成倍增長(zhǎng)。其他較流行的屏幕共享軟件,如RDP、X windows,采用平臺(tái)相關(guān)的渲染命令來(lái)描述屏幕內(nèi)容的變化,平臺(tái)依賴性較強(qiáng),且壓縮編碼的效率不高,因此并不適合視頻等內(nèi)容的共享。針對(duì)以上問(wèn)題,本系統(tǒng)采用h.264作為對(duì)內(nèi)容壓縮的編碼格式,并通過(guò)RTP協(xié)議傳輸,以節(jié)約帶寬提升畫質(zhì)。
3.1.1 基于QT的跨平臺(tái)軟件設(shè)計(jì)
Qt是一個(gè)跨平臺(tái)的C++圖形用戶界面應(yīng)用程序框架[7],能夠支持 Android、iOS、Linux、windows等操作系統(tǒng),本系統(tǒng)選取QT為開(kāi)發(fā)平臺(tái),其軟件架構(gòu)圖如圖1所示。

圖1 客戶端軟件架構(gòu)圖Fig.1 Client software architecture
整個(gè)應(yīng)用程序分6個(gè)模塊,其中用戶界面模塊主要完成軟件的配置,包括屏幕分享開(kāi)始/停止等功能鍵。屏幕內(nèi)容獲取模塊主要完成屏幕的定時(shí)截圖功能;屏幕內(nèi)容壓縮模塊主要是采用開(kāi)源x264合適的編碼算法對(duì)屏幕內(nèi)容進(jìn)行編碼;屏幕內(nèi)容發(fā)送模塊負(fù)責(zé)對(duì)編碼后的數(shù)據(jù)進(jìn)行RTP打包,并通過(guò)網(wǎng)絡(luò)接口發(fā)送出去;屏幕應(yīng)用場(chǎng)景智能識(shí)別模塊負(fù)責(zé)確定當(dāng)前屏幕共享的內(nèi)容是以文字為主還是以視頻播放為主,為選擇正確的編碼碼率提供參考;網(wǎng)絡(luò)擁塞狀況偵測(cè)模塊負(fù)責(zé)提供一種網(wǎng)絡(luò)機(jī)制探測(cè)網(wǎng)絡(luò)是否擁塞。
3.1.2 基于場(chǎng)景識(shí)別的碼率自適應(yīng)調(diào)整算法
采用H.264協(xié)議作為編碼方式具有占用帶寬小、壓縮效率高的特點(diǎn),能夠有效解決共享在線視頻占用帶寬過(guò)大的問(wèn)題;另一方面,碼率在一定程度上影響著畫面是否清晰,適當(dāng)調(diào)整碼率可以優(yōu)化畫質(zhì),但當(dāng)屏幕內(nèi)容分享主要為文字、網(wǎng)頁(yè)、靜態(tài)圖片時(shí),H.264協(xié)議不能智能識(shí)別內(nèi)容并通過(guò)提高碼率以提高們圖像質(zhì)量,也不能自動(dòng)偵測(cè)網(wǎng)絡(luò)是否擁塞。
針對(duì)以上問(wèn)題,本文提出了一種基于場(chǎng)景識(shí)別的碼率自適應(yīng)調(diào)整算法,該算法能夠自動(dòng)識(shí)別當(dāng)前屏幕應(yīng)用場(chǎng)景,并根據(jù)網(wǎng)絡(luò)擁塞狀況及當(dāng)前屏幕的應(yīng)用場(chǎng)景對(duì)H.264碼率進(jìn)行自適應(yīng)調(diào)整,以達(dá)到節(jié)約帶寬、提高畫質(zhì)的目的。算法主體思想如下:定時(shí)捕獲屏幕內(nèi)容,采用H.264協(xié)議對(duì)屏幕內(nèi)容進(jìn)行編碼,根據(jù)屏幕內(nèi)容智能識(shí)別當(dāng)前應(yīng)用場(chǎng)景并自動(dòng)探測(cè)網(wǎng)絡(luò)擁塞程度自適應(yīng)調(diào)節(jié)H.264的碼率,以達(dá)到最大化的利用帶寬及提高清晰度的目的,其算法示意圖如圖2所示。

圖2 碼率自適應(yīng)調(diào)整算法原理圖Fig.2 Block diagram of code rate self-adaption adjustment
其主要算法流程如下:
(1)制定精簡(jiǎn)協(xié)議,協(xié)商服務(wù)器端與客戶端可支持的碼率。
(2)通過(guò)定期發(fā)送網(wǎng)絡(luò)偵測(cè)包,自動(dòng)檢測(cè)網(wǎng)絡(luò)擁塞情況。
(3)遍歷當(dāng)前所有在屏幕上顯示的窗口信息,智能識(shí)別當(dāng)前屏幕的應(yīng)用場(chǎng)景,主要分為文字應(yīng)用場(chǎng)景與視頻應(yīng)用場(chǎng)景兩種。
(4)針對(duì)文字應(yīng)用場(chǎng)景與視頻應(yīng)用場(chǎng)景,分別制定不同級(jí)別的碼率,以實(shí)現(xiàn)精細(xì)化碼率控制。
根據(jù)場(chǎng)景決定當(dāng)前H.264編碼的碼率,當(dāng)檢測(cè)到網(wǎng)絡(luò)擁塞時(shí),自適應(yīng)調(diào)整當(dāng)前碼率。
為動(dòng)態(tài)檢測(cè)網(wǎng)絡(luò)擁塞狀況,客戶端定時(shí)發(fā)送網(wǎng)絡(luò)擁塞請(qǐng)求消息,攜帶時(shí)間戳等信息,服務(wù)器端收到后,將比較當(dāng)前時(shí)間,并將當(dāng)前時(shí)間戳及網(wǎng)絡(luò)延遲等信息通過(guò)網(wǎng)絡(luò)擁塞檢測(cè)應(yīng)答包發(fā)送給客戶端,通過(guò)延時(shí)情況,動(dòng)態(tài)評(píng)評(píng)網(wǎng)絡(luò)擁塞狀態(tài)。為智能檢測(cè)當(dāng)前屏幕的應(yīng)用場(chǎng)景,本文通過(guò)獲取當(dāng)前屏幕所有窗口的句柄,并獲取其相應(yīng)的進(jìn)程信息,根據(jù)當(dāng)前屏幕的窗口大小、進(jìn)程號(hào)等信息判斷當(dāng)前屏幕的的應(yīng)用是以文字為主還是以視頻為主,并對(duì)不同應(yīng)用場(chǎng)景進(jìn)行確定碼率范圍,有助于快速確定適合傳輸?shù)拇a率。
為使碼率調(diào)整算法能夠較好的跟蹤網(wǎng)絡(luò)擁塞情況的變化,達(dá)到充分利用帶寬提高畫質(zhì)的目的,本文采用增量式數(shù)字PD控制器來(lái)在線調(diào)整碼率。假設(shè)τ(i)為i時(shí)刻的碼率,θref(i)為我們期望網(wǎng)絡(luò)擁塞狀況,通常使用icmp包的返回值來(lái)描述,θr(i)為實(shí)際的網(wǎng)絡(luò)擁塞狀況。因此,在第i個(gè)采樣時(shí)刻,網(wǎng)絡(luò)擁塞狀況誤差為:

其中:kp與kd分別為碼率PD控制器的比例和微分系數(shù)。先通過(guò)經(jīng)驗(yàn)給出該系數(shù)的估計(jì)值,再通過(guò)實(shí)驗(yàn)對(duì)該值進(jìn)行調(diào)整,以期達(dá)到較好的跟蹤效果。
這種根據(jù)網(wǎng)絡(luò)擁塞情況、當(dāng)前屏幕應(yīng)用狀況動(dòng)態(tài)調(diào)整H.264碼率的方法能夠大大加大帶寬的利用屏及屏幕內(nèi)容分享的分辨率與質(zhì)量。
服務(wù)器端主要完成屏幕內(nèi)容接收、解碼、顯示等功能,考慮到編碼速度是目前視頻壓縮應(yīng)用的瓶頸[8],硬件方面采用BCM2835為處理器,移植嵌入式Linux操作系統(tǒng),并提供了HDMI/VGA/DVI多種顯示接口,兼容多種外接顯示設(shè)備。為減小模塊之間的耦合,提高系統(tǒng)的并發(fā)處理能力,本文設(shè)計(jì)了4個(gè)線程,分別是主線程、數(shù)據(jù)接收線程、數(shù)據(jù)解碼線程、顯示線程,其軟件流程圖如圖3所示。

圖3 服務(wù)器端軟件流程圖Fig.3 Server software flow chart
服務(wù)器端從網(wǎng)絡(luò)上會(huì)收到2種類型的數(shù)據(jù)包,一種是H.264編碼后的視頻數(shù)據(jù),另一種是控制信息,包括網(wǎng)絡(luò)擁塞檢測(cè)請(qǐng)求、編解碼能力協(xié)商請(qǐng)求等類型的消息。為提高程序的并發(fā)能力,分別設(shè)計(jì)了視頻數(shù)據(jù)隊(duì)列、控制信息隊(duì)列、數(shù)據(jù)發(fā)送隊(duì)列,這樣做的好處是,線程之間松耦合,可以并發(fā)處理。
主線程負(fù)責(zé)啟動(dòng)3個(gè)子線程,并監(jiān)控子線程狀態(tài)、處理外部事件,包括讀取控制信息隊(duì)列里面的數(shù)據(jù)包,對(duì)其進(jìn)行處理,并將要發(fā)送的數(shù)據(jù)放入數(shù)據(jù)發(fā)送隊(duì)列。
數(shù)據(jù)接收線程負(fù)責(zé)網(wǎng)絡(luò)數(shù)據(jù)的收發(fā),在從網(wǎng)絡(luò)上接收數(shù)據(jù)后,首先根據(jù)消息頭信息判斷是控制信息還是H.264編碼格式的數(shù)據(jù)包,并分別放入屏幕內(nèi)容數(shù)據(jù)隊(duì)列及控制信息隊(duì)列。數(shù)據(jù)解碼線程負(fù)責(zé)從視頻數(shù)據(jù)隊(duì)列中讀取數(shù)據(jù),并對(duì)數(shù)據(jù)包進(jìn)行H.264的解碼,解碼器則選取了 FFmpeg[9-11]開(kāi)源項(xiàng)目作為底層實(shí)現(xiàn),解碼后的數(shù)據(jù)放入視頻數(shù)據(jù)隊(duì)列,由視頻顯示線程負(fù)責(zé)讀取及顯示。
本文所設(shè)計(jì)的系統(tǒng)與著名屏幕共享軟件(VNC、RDP)進(jìn)行對(duì)比測(cè)試。具體測(cè)試環(huán)境如下:傳統(tǒng)屏幕共享軟件測(cè)試平臺(tái)為兩臺(tái)筆記本通過(guò)WiFi組成局域網(wǎng),均采用windows平臺(tái)、1280×800的屏幕分辨率;本文設(shè)計(jì)的屏幕內(nèi)容共享系統(tǒng)采用的測(cè)試環(huán)境則是筆記本與嵌入式平臺(tái)組成通過(guò) WiFi組成的無(wú)線局域網(wǎng),同樣采用1280×800的屏幕分辨率。
為有效評(píng)估在各個(gè)應(yīng)用場(chǎng)景下各軟件帶寬占用率的不同,測(cè)試內(nèi)容分為文字為主和以視頻播放為主的屏幕內(nèi)容共享,為保證測(cè)試結(jié)果的可比性,測(cè)試時(shí)采用同一個(gè)路由器,具體測(cè)試用例描述如下:
(1)以文字為主的應(yīng)用場(chǎng)景測(cè)試
選擇以文字描述為主的ppt文檔一份,共計(jì)60頁(yè),設(shè)置每4s變換一頁(yè)的速度進(jìn)行全屏播放。
(2)以圖片為主的應(yīng)用場(chǎng)景測(cè)試
選取以圖片為主的ppt文檔一份,共計(jì)60頁(yè),設(shè)置每4s變換一頁(yè)的速度進(jìn)行全屏播放。
(3)以視頻播放為主的應(yīng)用場(chǎng)景測(cè)試
選擇avi格式的視頻進(jìn)行播放,播放碼率為610kbps,分辨率為1280×526。
以上測(cè)試用例分別測(cè)試兩組,每組5次,取平均值。詳細(xì)的屏幕內(nèi)容共享系統(tǒng)的網(wǎng)絡(luò)流量速率統(tǒng)計(jì)的測(cè)試結(jié)果如表1所示。

表1 不同屏幕內(nèi)容共享系統(tǒng)網(wǎng)絡(luò)流量速率測(cè)試結(jié)果Tab.1 Test result of network traffic for different screen sharing systems
從以上結(jié)果可以看出,VNC與RDS軟件主要適用于文字為主的屏幕內(nèi)容共享場(chǎng)景,切換到視頻播放場(chǎng)景時(shí),所需帶寬激增。與傳統(tǒng)算法相比,本文所設(shè)計(jì)的系統(tǒng)對(duì)不同應(yīng)用場(chǎng)景所需的帶寬變化不大,相對(duì)平穩(wěn),當(dāng)切換到視頻播放場(chǎng)景時(shí),帶寬占用率低,優(yōu)勢(shì)明顯。
詳細(xì)介紹了一種基于嵌入式平臺(tái)大屏幕內(nèi)容分享系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。針對(duì)傳統(tǒng)屏幕內(nèi)容分享軟件占用帶寬大、畫質(zhì)差、不適合視頻內(nèi)容分享的問(wèn)題,提出了一種基于場(chǎng)景識(shí)別的碼率自適應(yīng)算法。該算法能夠根據(jù)當(dāng)前活躍的窗口句柄、進(jìn)程信息智能識(shí)別屏幕當(dāng)前的應(yīng)用場(chǎng)景,并根據(jù)網(wǎng)絡(luò)擁塞狀況選擇適合當(dāng)前應(yīng)用場(chǎng)景及網(wǎng)絡(luò)狀況的碼率。實(shí)驗(yàn)表明,該算法具有占用帶寬小、畫質(zhì)好的優(yōu)點(diǎn),能夠滿足視頻內(nèi)容的屏幕共享需求。
[1]潘兆泰.交互式屏幕共享的低復(fù)雜度壓縮和低延時(shí)傳輸方法[D].合肥:中國(guó)科學(xué)技術(shù)大學(xué),2013.Pan Z T.Low-complexity compression and low-latency transmission for interactive screen sharing[D].Hefei:University of Science and Technology of China,2013.(in Chinese)
[2]Scheifler R W,Gettys J.The X Window system [J].ACM Transactions on Graphics,1986,5(2):79-109.
[3]Richardson T,Stafford-Fraser Q,Wood K R,et al.Virtual network computing [J].IEEE Internet Computing,1998,2(1):33-38.
[4]Schwarz H,Marpe D,Wiegand T.Overview of the scalable video coding extension of the H.264/AVC standard[J].IEEE Transactions on Circuits and Systems for Video Technology,2007,17(9):1103-1120.
[5]祝世平,張玲.基于分形和 H.264的視頻編碼系統(tǒng)[J].光學(xué)精密工程,2013,21(3):774-781.Zhu S P,Zhang L.Video coding system based on fractal and H.264[J].Optics and Precision Engineering,2013,21(3):774-781.(in Chinese)
[6]吳銀花,金龍旭,張柯.應(yīng)用Jmode值單調(diào)性的快速P幀模式選擇算法[J].液晶與顯示,2013,28(2):266-272.Wu Y H,Jin L X,Zhang K.Fast P-frame mode decision algorithm using monotonicity of Jmode[J].Chinese Journal of Liquid Crystals and Displays,2013,28(2):266-272.(in Chinese)
[7]劉艷青,蘇桂蓮.基于 Qt4的圖形用戶界面程序的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代計(jì)算機(jī):下半月版,2009(3):170-172.Liu Y Q,Su G L.Design and implementation of graphical user interface program based on Qt4[J].Modern Computer,2009(3):170-172.(in Chinese)
[8]吳銀花,金龍旭,張寧,等.針對(duì) H.264改進(jìn)的快速整像素運(yùn)動(dòng)估計(jì)算法[J].光學(xué)精密工程,2013,21(4):1017-1025.Wu Y H,Jin L X,Zhang N,et al.Improvement of fast integer pixel motion estimation algorithm for H.264 [J].Optics and Precision Engineering,2013,21(4):1017-1025.(in Chinese)
[9]李軍杰.基于FFmpeg的 H.264解碼器在Symbian上的移植和優(yōu)化[D].武漢:華中科技大學(xué),2011.Li J J.The implementation and optimization of symbian’s H.264decoder based on the FFmpeg [D].Wuhan:Huazhong University of Science & Technology,2011.(in Chinese)
[10]Liu Y H,Wang S.An embedded multimedia player on S3C6410platform [J].Advanced Materials Research,2012,571:680-686.
[11]Ni H B,Cao S X.Research and implementation of asynchronous video converter based on Linux[J].Applied Mechanics and Materials,2013,241:2596-2600.