在低速網(wǎng)絡(luò )下利用VNC實(shí)現應用程序共享的解決方案
1 VNC協(xié)議特點(diǎn)
VNC由VNC Server和VNC Client兩部分組成。VNC Server產(chǎn)生本地顯示,通過(guò)VNC協(xié)議實(shí)現VNC Server和VNC Client之間的通信。VNC協(xié)議中實(shí)現了一種遠程圖形用戶(hù)界面訪(fǎng)問(wèn)協(xié)議RFB[2](Remote Frame Buffer)協(xié)議,RFB協(xié)議是基于幀緩存(Frame Buffer)層級,因此適用于所有操作系統平臺及應用,例如X Windows、MS Windows和Macintosh等。VNC在TCP/IP協(xié)議基礎上通過(guò)一個(gè)簡(jiǎn)單的圖形界面傳輸協(xié)議實(shí)現在遠程客戶(hù)端上顯示服務(wù)器端的桌面實(shí)時(shí)數據。
協(xié)議的顯示方面是基于一個(gè)很簡(jiǎn)單的原理,即將一個(gè)矩形區域的像素點(diǎn)放置在一個(gè)特定的位置上。通過(guò)采用不同的圖像編碼方法,可以在傳輸速度、圖像質(zhì)量、服務(wù)器處理速度、終端顯示速度和網(wǎng)絡(luò )帶寬之間達到平衡。通過(guò)每次的窗口更新,可以得到最新的窗口內容。在某些方面,這看上去更像是一種視頻圖像流。每次窗口更新的消息是通過(guò)客戶(hù)端發(fā)送給服務(wù)器端的,每接收到一個(gè)消息,服務(wù)器端對其發(fā)生響應,這樣就使得協(xié)議本身可以控制自己的刷新速度。如果客戶(hù)端或者由于網(wǎng)絡(luò )的原因比較慢,同樣地刷新率也會(huì )比較低,這樣可以完成速度的自適應。
輸入協(xié)議是基于標準工作站的鍵盤(pán)響應消息和鼠標設備的。當客戶(hù)端接收到這些輸入消息后,被簡(jiǎn)單地以事件形式傳送給服務(wù)器端,并產(chǎn)生對應的動(dòng)作。
2 VNC在低帶寬網(wǎng)絡(luò )環(huán)境中應用存在的問(wèn)題
在大規模視頻會(huì )議中,當需要對其中一個(gè)會(huì )議成員的桌面或者某個(gè)應用程序進(jìn)行共享時(shí),此時(shí)VNC服務(wù)器的計算性能和網(wǎng)絡(luò )接入的條件都比較差,這樣就對共享機制提出了很高的要求,其必須具備高效、延時(shí)小,又要求架構輕盈、占系統資源少、節省帶寬等性能。由于在國外網(wǎng)絡(luò )帶寬足夠,采用VNC機制的多點(diǎn)應用程序共享能夠流暢地運行,但在國內目前低帶寬的網(wǎng)絡(luò )條件下,VNC機制采用的是星型直連結構,如果直接采用VNC默認的星型直連機制,在多點(diǎn)遠程視頻會(huì )議中實(shí)現應用程序共享會(huì )很困難,VNC Server與各VNC Client以直連方式進(jìn)行通信,此種情況下由于VNC Server端的出口帶寬受到限制,VNC Server端的數據發(fā)送壓力會(huì )呈線(xiàn)性增長(cháng),在2 MHz的ADSL出口帶寬條件下,當會(huì )議成員達到10個(gè)后,將導致嚴重的網(wǎng)絡(luò )擁塞,致使應用程序共享實(shí)時(shí)性大大降低,因而其不具備在遠程視頻會(huì )議系統中的實(shí)際可用性。
3 VNC共享機制改進(jìn)方案
3.1 VNC共享通信機制
VNC機制默認采用直連的方式同VNC Client通信,本文將提出一種新的實(shí)現方案,通過(guò)在遠程視頻會(huì )議系統[4]中采用中轉服務(wù)器轉發(fā)模式實(shí)現共享,具體結構如圖1所示。此時(shí)VNC Server端只需上傳數據給中轉服務(wù)器,VNC Client只與中轉服務(wù)器建立連接,由中轉服務(wù)器向每個(gè)客戶(hù)端發(fā)送數據,通常中轉服務(wù)器的網(wǎng)絡(luò )出口帶寬都比較大,因此網(wǎng)絡(luò )帶寬不會(huì )成為性能瓶頸。這樣就大大減輕了VNC Server端的網(wǎng)絡(luò )傳輸壓力,在應用程序共享時(shí)系統的反應速度也將得到提升。
3.2 屏幕變化檢測算法
屏幕變化檢測算法性能的好壞將直接影響到VNC Server端發(fā)送的數據量,一種高效的屏幕檢測算法將大大降低傳輸的數據量,節省網(wǎng)絡(luò )帶寬,從而提高系統的實(shí)時(shí)效果。VNC默認的屏幕變化檢測機制是通過(guò)消息鉤子機制獲取區域的坐標信息后,再將坐標區域的屏幕像素數據發(fā)送給各VNC Client。此檢測方法使得大量沒(méi)有發(fā)生改變的屏幕數據也被發(fā)送,增加了網(wǎng)絡(luò )發(fā)送的數據量,在低速網(wǎng)絡(luò )環(huán)境中容易造成網(wǎng)絡(luò )擁塞,影響系統的性能。因此,本文在此基礎上提出了一種新的屏幕變化區域檢測算法。
VNC機制通過(guò)采用消息鉤子機制截獲系統屏幕重繪區域信息,將得到的區域拆分成一個(gè)矩形鏈表(遍歷鏈表)來(lái)存儲區域坐標信息,記為array_list,定義一個(gè)變化區域記為vnc_rgn,專(zhuān)門(mén)保存需要重新發(fā)送的區域位置信息,對array_list每個(gè)成員矩形調用此檢測算法進(jìn)行變化區域檢測。具體的算法流程圖如圖2所示。
(1)假設其中一個(gè)成員矩形為arri,如果arri的長(cháng)寬都小于32×32,則直接作為需重新發(fā)送的變化區域,保存到vnc_rgn中,否則對arri進(jìn)行分析檢測。
(2)首先定義一個(gè)新的矩形arrj(arri.left,0,arri.right,0),在arri中找到發(fā)生變化的行,記錄該行的y坐標,記arrj.top=y,同時(shí)y+=16遞增找到未發(fā)生變化行,暫時(shí)記arrj.bottom=y;然后從arrj底部y-=1進(jìn)行比較,尋找內容發(fā)生變化的行,找到后將此行的y坐標設置成arrj.bottom=y。至此確定了變化矩形arrj的最終的top、bottom坐標。同時(shí)將arri的值設為arri(arri.left,arrj.bottom,arri.right,arri.bottom)。在對arrj分析完畢后接著(zhù)對arri遍歷分析直至結束。
(3)確定矩形arrj后,對矩形arrj進(jìn)行分析。首先定義一個(gè)矩形arrn(0,0,0,0),在arrj中尋找最先發(fā)生改變的列,找到后記錄發(fā)生變化的區域的left、top坐標,arrn.left=x,arrn.top=y,分別對x、y軸方向循環(huán)遍歷進(jìn)行分析(記為x+=32,y+=32),如果此列屏幕像素數據改變,則x+=32繼續比較;否則將記錄arrn.right=x,對y軸方向進(jìn)行同樣的比較,y+=32,并記錄arrn.bottom=y,最終得到需要發(fā)送的變化區域矩形坐標,并將此矩形保存到最終發(fā)送的矩形鏈表中,同時(shí)記錄下arrk(arrn.right,arrn.top,arrj.right,arrn.bottom)、arrm(arrn.left,arrn.bottom,arrj.right,arrj.bottom),分別將arrk、arrm賦值給arrj進(jìn)行類(lèi)似分析檢測,依次循環(huán)遍歷整個(gè)arrj,直到結束。
通過(guò)此屏幕變化區域檢測算法,對整個(gè)array_list鏈表的成員矩形進(jìn)行遍歷后得到需要重新發(fā)送的變化區域坐標信息。
4 實(shí)驗結果
此改進(jìn)方案已經(jīng)應用于VcomOffice遠程視頻會(huì )議系統中。實(shí)驗環(huán)境為:局域網(wǎng)內,中轉服務(wù)器采用Linux操作系統,VNC Server和VNC Client端均采用Windows XP操作系統,具體的軟硬件配置如表1所示。
為了驗證調用屏幕變化區域檢測算法前后,VNCServer端對同一操作生成的數據量的變化,實(shí)驗在100 M的局域網(wǎng)內進(jìn)行,VNC Server采用的是VNC默認的tight編碼[5],編碼后經(jīng)過(guò)zlib壓縮[5]后發(fā)送給中轉服務(wù)器,主要進(jìn)行以下場(chǎng)景的測試:
(1)打開(kāi)一個(gè)Word文檔,剪切、復制、粘貼一段文字,圖片保存到Word,在Word中輸入一些內容;
(2)打開(kāi)IE瀏覽器登錄www.sina.com.cn主頁(yè);
(3)打開(kāi)一個(gè)PDF文檔后,拖動(dòng)滾動(dòng)條至底部;
(4)打開(kāi)資源管理器,在屏幕上做拖動(dòng)操作,之后將其最大化。
調用檢測算法前后VNC Server發(fā)送數據量如圖3所示。通過(guò)對比可以看到,在調用屏幕區域變化檢測算法前后,VNC Server端發(fā)送的數據量都會(huì )有一定程度的下降。當執行相同的Word操作時(shí),VNC Server端發(fā)送的數據量降低了12.21%,登錄新浪網(wǎng)主頁(yè)的過(guò)程中數據發(fā)送量只降低了4.82%,打開(kāi)PDF文檔并拖動(dòng)滾動(dòng)條至最底端的過(guò)程中,發(fā)送的數據總量降低了14.63%,在資源管理器的縮放過(guò)程中,數據發(fā)送量下降了22.19%。
測試結果表時(shí),當VNC系統調用屏幕區域變化檢測算法后,VNC Server端的發(fā)送數據量平均會(huì )有10%左右的下降。這在遠程多點(diǎn)應用程序共享中,會(huì )大大減輕VNC Server端的發(fā)送壓力,減少網(wǎng)絡(luò )擁塞現象出現的概率,從而提高了應用程序共享時(shí)遠程客戶(hù)端響應速度。
本文介紹了在低速網(wǎng)絡(luò )環(huán)境下遠程視頻會(huì )議系統中通過(guò)VNC協(xié)議進(jìn)行應用程序共享時(shí)存在的問(wèn)題,提出了一種新的改進(jìn)方案,并結合新方案提出了一種新的屏幕區域變化檢測算法。此外,對系統在調用新的屏幕區域變化檢測算法前后進(jìn)行了測試比較。該方案已經(jīng)應用于大連浩視數字技術(shù)有限公司的VcomOffice遠程視頻會(huì )議系統。通過(guò)多個(gè)實(shí)驗場(chǎng)景的測試,實(shí)驗結果表明,采用新的屏幕變化區域檢測算法后,VNC Server端的發(fā)送數據量出現了較大程度的下降,為低速網(wǎng)絡(luò )環(huán)境下遠程視頻會(huì )議系統節省了網(wǎng)絡(luò )帶寬,提高了應用程序共享系統的實(shí)時(shí)性,從而實(shí)現了VNC在低速網(wǎng)絡(luò )環(huán)境下的應用,應用程序共享使地理位置分散的用戶(hù)通過(guò)計算機網(wǎng)絡(luò )的連接共享某一應用程序,在互聯(lián)網(wǎng)辦公、遠程視頻會(huì )議系統、遠程協(xié)助等方面有著(zhù)不可替代的作用,具有相當廣闊的發(fā)展前景。
評論