vnc協議編碼方式

2021-06-01 06:09:50 字數 2127 閱讀 5404

1.          功能

在本機顯示和控制別一台計算機的桌面,就像直接用那台計算機一樣

2.          vnc的編碼方式主要有

a)        raw(0):不進行編碼,直接傳送資料,是最慢的一種

b)        copyrect(1):對於客戶端,在已經有了相同象素數據的時候比較有效,比如移動或視窗內容滾動時

c)        rre(2):將象素顏色相同的某乙個矩形區域作為乙個整體傳輸

d)        hextile(5):是rre編碼的變種,把螢幕分成16x16象素的小塊,每塊用raw或rre方式轉送

e)        zrle(16):它結合了zlib壓縮

二、hextile原理

通過解釋hextile演算法,說明了簡單而常用的螢幕傳送和壓縮演算法,希望對螢幕監測、傳送相關的工作有所啟發

1.          分割

a)        傳送的影象區域被分為若干個大小為16×16象素的塊,如果整個矩形不是16的倍數,則最後1行(或列)的塊寬度(或高度)變小

b)        這些塊按從左到右,從上到下的順序排列,螢幕中變化的塊被傳送,不變的不被傳送

c)        由於塊大小是16x16,所以塊內座標xy可用一位元組表示,wh可用乙個位元組表示

2.          標誌位:

傳送每塊資料的之前,先要傳送乙個位元組的標誌位,標記出該塊的傳送的格式,它的每一位意義如下

a)        右一:raw資料:不壓縮,直接傳送,一般此位置1時其它位都置0

b)        右二:包含背景色資料:標誌位之後需要接收背景色資料

c)        右三:包含前景色資料:背景色之後需要接收前景色資料

d)        右四:是否含有子塊:只要該塊中含有兩種及兩種以上顏色,則此位置1

e)        右五:子塊的顏色:如果含有兩種顏色,此位置0,子塊顏色用前景色;若該塊中含有兩種以上的顏色,此位置1,子塊顏色需要單獨指明

3.          塊內部的編碼:

a)        計算塊內部的顏色數:一種、兩種、多種,並記錄出現頻率最多的顏色為背景色,如果僅有兩種顏色,則另一顏色記為前景色

b)        判斷塊內顏色數是否為一種,如果是,則先修改傳送標誌位,然後傳送整塊大小(0,0,w,h)和背景色,此塊傳送即完成

c)        如果不是一種,則把塊拆分成顏色不同的小矩形,方法如下:

i.              先把塊複製到一塊記憶體區中,以免破壞原始資料,暫稱tmpbuf

ii.              從第乙個象素開始判斷,該點顏色是否與背景色相同

iii.              如果不同,則分別向右和向下求得與該點顏色連續的色塊

iv.              對比右色塊和下色塊,取出其中較大的乙個,做為乙個矩形色塊

v.              在tmpbuf中把此矩形填成背景色,以避免重複判斷

vi.              繼續判斷下一象素點……

d)        記錄各個矩形色塊的位置(x,y,w,h),如果塊內含兩種以上顏色,還要記錄矩形色塊的顏色值

e)        一邊取得矩形色塊,一邊判斷矩形色塊描述資料的總長是否大於原始資料,如果大於原始資料,則放棄取色塊,標誌位元組raw位(右一)置1,以raw方式直接傳送原始資料,此塊傳送完成

f)         如果塊含兩種以上顏色,則將標誌位的子塊位(右五)置1,否則置0

g)        傳送標誌位,傳送矩形色塊個數,然後傳送各矩形塊資料,塊中顏色數為2時不需要傳送每個矩形塊的顏色資料,只傳位置即可

h)        注意:如果背景色或前景色與前一塊(16x16塊)相同,則可以不傳送背景色或前景色,客戶端會預設延用前一塊的

三、參考例項

1.          原始碼:

a)        原始碼包:tightvnc-1.2.9.orig.tar.gz

b)        編碼程式:tightvnc-1.2.9.orig/xvnc/programs/xserver/hw/vnc/hextile.c

c)        解碼程式:rightvnc-1.2.9.orig/vncviewer/hextile.c

2.          參考文件

b)        

通過VNC協議Windows遠端Mac OS X

支援mac10.5 10.7 mac os x vnc服務設定 mac os x 已經增加支援了由vnc viewer訪問的功能,設定如下 系統偏好設定 共享 勾選 螢幕共享 然後在電腦設定 vnc顯示程式可以使用密碼控制螢幕輸入8位密碼,並輸入登入使用的密碼允許設定,這樣就可以通過其它pc或mac...

VNC的Hextile編碼原理及實現

vnc 1.功能 在本機顯示和控制別一台計算機的桌面,就像直接用那台計算機一樣 2.vnc 的編碼方式主要有 a raw 0 不進行編碼,直接傳送資料,是最慢的一種 b copyrect 1 對於客戶端,在已經有了相同象素數據的時候比較有效,比如移動或視窗內容滾動時 c rre 2 將象素顏色相同的...

協議編碼壓縮

幾種壓縮演算法原理介紹 數字壓縮編碼技術 無失真壓縮比較常見和有效的是 lzw,霍夫曼和算術編碼 lzw演算法 參考文章 lzw資料壓縮演算法的原理分析 lzw演算法 lempel ziv welch lzw演算法 講了編碼和解碼 各種語言的實現原始碼 兩個靠譜的c和c 原始碼實現 基本思想 建立乙...