楊 亮,鄧春健,宋喜佳
(1.電子科技大學中山學院 計算機學院,廣東 中山 528402;2.廣東工業(yè)大學 自動化學院,廣東 廣州 510006)
在近年來隨著科技的快速發(fā)展以及智能設備的普及,人們工作生活中的多媒體設備已經(jīng)從傳統(tǒng)的以個人電腦和電視機為主,轉變成桌面電腦、智能手機、平板電腦和電視機共同存在[1]。屏與屏之間的內(nèi)容共享不再僅僅局限于計算機與計算機之間,更多會發(fā)生在諸如計算機與智能電視、智能電視與手持式設備等多種智能設備之間,然而現(xiàn)有一些成熟的屏幕內(nèi)容共享系統(tǒng),例如X系統(tǒng)[2](the X system)、微軟的遠程桌面協(xié)議(Microsoft Remote Desktop Protocol,RDP)、虛擬網(wǎng)絡計算[3](Virtual Network Computing),主要針對計算機與計算機之間的屏幕共享,另一方面,傳統(tǒng)屏幕內(nèi)容分享系統(tǒng)主要用于文字、圖片等內(nèi)容的共享,目前所采用的壓縮編碼方式對帶寬要求過大,并不適合視頻內(nèi)容的共享,而 H.264[4]具有更好的壓縮性能以及面象網(wǎng)絡傳輸?shù)摹坝押眯浴保?],是目前應用最廣泛的視頻編碼標準之一[6]。
針對以上問題,本文介紹了一種基于嵌入式平臺大屏幕分享系統(tǒng)的設計方法與具體實現(xiàn),該系統(tǒng)基于場景識別的碼率自適應調整算法,能夠根據(jù)網(wǎng)絡擁塞狀況及當前屏幕的應用場景對H.264碼率進行自適應調整,以達到節(jié)約帶寬、提高畫質的目的,另一方面,為節(jié)約成本并使系統(tǒng)更加小巧與便攜,服務器端基于嵌入式ARM平臺。
本系統(tǒng)由客戶端與服務器端兩部分構成,客戶端運行于需要進行屏幕內(nèi)容分享的機器上,一般是筆記本電腦、平板等個人計算機,主要完成屏幕內(nèi)容的獲取、壓縮編碼及傳輸?shù)裙ぷ?;服務器端運行于嵌入式平臺,采用的就是一款帶圖形加速功能的嵌入式多媒體應用處理器BCM2835作為服務器端的主控芯片,上面搭載嵌入式Linux操作系統(tǒng),主要完成內(nèi)容的接收、解碼、顯示等功能。
傳統(tǒng)應用較廣泛的vnc軟件采用的是RFB協(xié)議實現(xiàn)屏幕內(nèi)容的共享功能,具有良好的跨平臺性,但當屏幕內(nèi)容變化大時,例如在播放視頻時,所占有帶寬將成倍增長。其他較流行的屏幕共享軟件,如RDP、X windows,采用平臺相關的渲染命令來描述屏幕內(nèi)容的變化,平臺依賴性較強,且壓縮編碼的效率不高,因此并不適合視頻等內(nèi)容的共享。針對以上問題,本系統(tǒng)采用h.264作為對內(nèi)容壓縮的編碼格式,并通過RTP協(xié)議傳輸,以節(jié)約帶寬提升畫質。
3.1.1 基于QT的跨平臺軟件設計
Qt是一個跨平臺的C++圖形用戶界面應用程序框架[7],能夠支持 Android、iOS、Linux、windows等操作系統(tǒng),本系統(tǒng)選取QT為開發(fā)平臺,其軟件架構圖如圖1所示。
圖1 客戶端軟件架構圖Fig.1 Client software architecture
整個應用程序分6個模塊,其中用戶界面模塊主要完成軟件的配置,包括屏幕分享開始/停止等功能鍵。屏幕內(nèi)容獲取模塊主要完成屏幕的定時截圖功能;屏幕內(nèi)容壓縮模塊主要是采用開源x264合適的編碼算法對屏幕內(nèi)容進行編碼;屏幕內(nèi)容發(fā)送模塊負責對編碼后的數(shù)據(jù)進行RTP打包,并通過網(wǎng)絡接口發(fā)送出去;屏幕應用場景智能識別模塊負責確定當前屏幕共享的內(nèi)容是以文字為主還是以視頻播放為主,為選擇正確的編碼碼率提供參考;網(wǎng)絡擁塞狀況偵測模塊負責提供一種網(wǎng)絡機制探測網(wǎng)絡是否擁塞。
3.1.2 基于場景識別的碼率自適應調整算法
采用H.264協(xié)議作為編碼方式具有占用帶寬小、壓縮效率高的特點,能夠有效解決共享在線視頻占用帶寬過大的問題;另一方面,碼率在一定程度上影響著畫面是否清晰,適當調整碼率可以優(yōu)化畫質,但當屏幕內(nèi)容分享主要為文字、網(wǎng)頁、靜態(tài)圖片時,H.264協(xié)議不能智能識別內(nèi)容并通過提高碼率以提高們圖像質量,也不能自動偵測網(wǎng)絡是否擁塞。
針對以上問題,本文提出了一種基于場景識別的碼率自適應調整算法,該算法能夠自動識別當前屏幕應用場景,并根據(jù)網(wǎng)絡擁塞狀況及當前屏幕的應用場景對H.264碼率進行自適應調整,以達到節(jié)約帶寬、提高畫質的目的。算法主體思想如下:定時捕獲屏幕內(nèi)容,采用H.264協(xié)議對屏幕內(nèi)容進行編碼,根據(jù)屏幕內(nèi)容智能識別當前應用場景并自動探測網(wǎng)絡擁塞程度自適應調節(jié)H.264的碼率,以達到最大化的利用帶寬及提高清晰度的目的,其算法示意圖如圖2所示。
圖2 碼率自適應調整算法原理圖Fig.2 Block diagram of code rate self-adaption adjustment
其主要算法流程如下:
(1)制定精簡協(xié)議,協(xié)商服務器端與客戶端可支持的碼率。
(2)通過定期發(fā)送網(wǎng)絡偵測包,自動檢測網(wǎng)絡擁塞情況。
(3)遍歷當前所有在屏幕上顯示的窗口信息,智能識別當前屏幕的應用場景,主要分為文字應用場景與視頻應用場景兩種。
(4)針對文字應用場景與視頻應用場景,分別制定不同級別的碼率,以實現(xiàn)精細化碼率控制。
根據(jù)場景決定當前H.264編碼的碼率,當檢測到網(wǎng)絡擁塞時,自適應調整當前碼率。
為動態(tài)檢測網(wǎng)絡擁塞狀況,客戶端定時發(fā)送網(wǎng)絡擁塞請求消息,攜帶時間戳等信息,服務器端收到后,將比較當前時間,并將當前時間戳及網(wǎng)絡延遲等信息通過網(wǎng)絡擁塞檢測應答包發(fā)送給客戶端,通過延時情況,動態(tài)評評網(wǎng)絡擁塞狀態(tài)。為智能檢測當前屏幕的應用場景,本文通過獲取當前屏幕所有窗口的句柄,并獲取其相應的進程信息,根據(jù)當前屏幕的窗口大小、進程號等信息判斷當前屏幕的的應用是以文字為主還是以視頻為主,并對不同應用場景進行確定碼率范圍,有助于快速確定適合傳輸?shù)拇a率。
為使碼率調整算法能夠較好的跟蹤網(wǎng)絡擁塞情況的變化,達到充分利用帶寬提高畫質的目的,本文采用增量式數(shù)字PD控制器來在線調整碼率。假設τ(i)為i時刻的碼率,θref(i)為我們期望網(wǎng)絡擁塞狀況,通常使用icmp包的返回值來描述,θr(i)為實際的網(wǎng)絡擁塞狀況。因此,在第i個采樣時刻,網(wǎng)絡擁塞狀況誤差為:
其中:kp與kd分別為碼率PD控制器的比例和微分系數(shù)。先通過經(jīng)驗給出該系數(shù)的估計值,再通過實驗對該值進行調整,以期達到較好的跟蹤效果。
這種根據(jù)網(wǎng)絡擁塞情況、當前屏幕應用狀況動態(tài)調整H.264碼率的方法能夠大大加大帶寬的利用屏及屏幕內(nèi)容分享的分辨率與質量。
服務器端主要完成屏幕內(nèi)容接收、解碼、顯示等功能,考慮到編碼速度是目前視頻壓縮應用的瓶頸[8],硬件方面采用BCM2835為處理器,移植嵌入式Linux操作系統(tǒng),并提供了HDMI/VGA/DVI多種顯示接口,兼容多種外接顯示設備。為減小模塊之間的耦合,提高系統(tǒng)的并發(fā)處理能力,本文設計了4個線程,分別是主線程、數(shù)據(jù)接收線程、數(shù)據(jù)解碼線程、顯示線程,其軟件流程圖如圖3所示。
圖3 服務器端軟件流程圖Fig.3 Server software flow chart
服務器端從網(wǎng)絡上會收到2種類型的數(shù)據(jù)包,一種是H.264編碼后的視頻數(shù)據(jù),另一種是控制信息,包括網(wǎng)絡擁塞檢測請求、編解碼能力協(xié)商請求等類型的消息。為提高程序的并發(fā)能力,分別設計了視頻數(shù)據(jù)隊列、控制信息隊列、數(shù)據(jù)發(fā)送隊列,這樣做的好處是,線程之間松耦合,可以并發(fā)處理。
主線程負責啟動3個子線程,并監(jiān)控子線程狀態(tài)、處理外部事件,包括讀取控制信息隊列里面的數(shù)據(jù)包,對其進行處理,并將要發(fā)送的數(shù)據(jù)放入數(shù)據(jù)發(fā)送隊列。
數(shù)據(jù)接收線程負責網(wǎng)絡數(shù)據(jù)的收發(fā),在從網(wǎng)絡上接收數(shù)據(jù)后,首先根據(jù)消息頭信息判斷是控制信息還是H.264編碼格式的數(shù)據(jù)包,并分別放入屏幕內(nèi)容數(shù)據(jù)隊列及控制信息隊列。數(shù)據(jù)解碼線程負責從視頻數(shù)據(jù)隊列中讀取數(shù)據(jù),并對數(shù)據(jù)包進行H.264的解碼,解碼器則選取了 FFmpeg[9-11]開源項目作為底層實現(xiàn),解碼后的數(shù)據(jù)放入視頻數(shù)據(jù)隊列,由視頻顯示線程負責讀取及顯示。
本文所設計的系統(tǒng)與著名屏幕共享軟件(VNC、RDP)進行對比測試。具體測試環(huán)境如下:傳統(tǒng)屏幕共享軟件測試平臺為兩臺筆記本通過WiFi組成局域網(wǎng),均采用windows平臺、1280×800的屏幕分辨率;本文設計的屏幕內(nèi)容共享系統(tǒng)采用的測試環(huán)境則是筆記本與嵌入式平臺組成通過 WiFi組成的無線局域網(wǎng),同樣采用1280×800的屏幕分辨率。
為有效評估在各個應用場景下各軟件帶寬占用率的不同,測試內(nèi)容分為文字為主和以視頻播放為主的屏幕內(nèi)容共享,為保證測試結果的可比性,測試時采用同一個路由器,具體測試用例描述如下:
(1)以文字為主的應用場景測試
選擇以文字描述為主的ppt文檔一份,共計60頁,設置每4s變換一頁的速度進行全屏播放。
(2)以圖片為主的應用場景測試
選取以圖片為主的ppt文檔一份,共計60頁,設置每4s變換一頁的速度進行全屏播放。
(3)以視頻播放為主的應用場景測試
選擇avi格式的視頻進行播放,播放碼率為610kbps,分辨率為1280×526。
以上測試用例分別測試兩組,每組5次,取平均值。詳細的屏幕內(nèi)容共享系統(tǒng)的網(wǎng)絡流量速率統(tǒng)計的測試結果如表1所示。
表1 不同屏幕內(nèi)容共享系統(tǒng)網(wǎng)絡流量速率測試結果Tab.1 Test result of network traffic for different screen sharing systems
從以上結果可以看出,VNC與RDS軟件主要適用于文字為主的屏幕內(nèi)容共享場景,切換到視頻播放場景時,所需帶寬激增。與傳統(tǒng)算法相比,本文所設計的系統(tǒng)對不同應用場景所需的帶寬變化不大,相對平穩(wěn),當切換到視頻播放場景時,帶寬占用率低,優(yōu)勢明顯。
詳細介紹了一種基于嵌入式平臺大屏幕內(nèi)容分享系統(tǒng)的設計與實現(xiàn)。針對傳統(tǒng)屏幕內(nèi)容分享軟件占用帶寬大、畫質差、不適合視頻內(nèi)容分享的問題,提出了一種基于場景識別的碼率自適應算法。該算法能夠根據(jù)當前活躍的窗口句柄、進程信息智能識別屏幕當前的應用場景,并根據(jù)網(wǎng)絡擁塞狀況選擇適合當前應用場景及網(wǎng)絡狀況的碼率。實驗表明,該算法具有占用帶寬小、畫質好的優(yōu)點,能夠滿足視頻內(nèi)容的屏幕共享需求。
[1]潘兆泰.交互式屏幕共享的低復雜度壓縮和低延時傳輸方法[D].合肥:中國科學技術大學,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].光學精密工程,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]吳銀花,金龍旭,張柯.應用Jmode值單調性的快速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的圖形用戶界面程序的設計與實現(xiàn)[J].現(xiàn)代計算機:下半月版,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]吳銀花,金龍旭,張寧,等.針對 H.264改進的快速整像素運動估計算法[J].光學精密工程,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].武漢:華中科技大學,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.