TightVNC 原始碼分析和實現

2021-09-23 10:27:18 字數 1885 閱讀 9400

(水平有限,把我分析的和猜測的記錄下來)

在學習ffmpeg 參考了雷神的**,繼承他開源的精神

vnc 核心主要包含兩個部分 rfb協議, 和基於x11的鍵盤和滑鼠的捕獲,傳送給服務端

改用 sdl 滑鼠鍵盤採集資料

linux x11 xtestfakebuttonevent 模擬滑鼠輸入

window mouse_event 模擬滑鼠輸入

參考原始碼實現rfb 協議互動部分, 顯示和事件捕獲準備用qt 或者sdl去寫, 

並加入h264的方式去更新frame (空想)

利用現有寫好的ffmpeg 截圖 傳送 實現的實時螢幕顯示 改寫vnc 實現方式

基本以實現多屏監控和遠端控制功能,linux 版本和window 版本

github :

window 編譯環境 mingw 32 + pthread lib

linux gcc

|

v

xtdisplay(toplevel); //顯示視窗 沒有設定width height 所以看不到視窗

|

v

getargsandresources(); // 建立dialog 輸入 解析引數

|

v

initialiserfbconnection(); //tcp 報文互動 主要是認證 一問一答方式

|

v

protocol version 003.008

|

v

securty types supproted 2 vnc 16 tightvnc

|

v

authentication 加密方式

|

v

share desktop flag

|

v

server framebuffer parameters 根據 視窗大小值 色深 16bit rgb

|

v

client set encoding 設定 支援編碼格式 zrle zlib hextitle

|

v

client set pixel format

|

v

client framebuffer update request

setvisualandcmap(); //設定色深

|

v

toplevelinitbeforerealization(); //設定視窗大小

|

v

desktopinitbeforerealization(); //建立工具欄

|

v

xtrealizewidget(); //真正顯示視窗

| vsetformatandencodings(); //告訴服務端支援編碼和解碼的方式

| vwhile(1)

x11 捕獲鍵盤滑鼠事件傳送流程

-> 根據註冊名繫結函式位址 xtactionsrec actions

char *fallback_resources =

static xtactionsrec actions = ,,,

,,,,

,,,,

,};sendrfbevent() //傳送滑鼠鍵盤貼上事件

bool handlerfbservermessage()

switch(msg.type)

LinkedHashMap原始碼分析及實現LRU演算法

ps 要先了解hashmap的實現原理hashmap原始碼分析 可以看到linkedhashmap繼承了hashmap,其實際是在hashmap基礎上,把資料節點連成乙個雙向鍊錶,遍歷的時候按鍊錶順序遍歷。小總結預設的linkedhashmap 的遍歷會按照插入的順序遍歷出來,hashmap則不保證...

從原始碼角度分析RACObserve的實現原理(一)

racobserve是個巨集,racobserve target,keypath 最終是執行 target rac valuesforkeypath keypath target,keypath observer self 這就牽出nsobject racpropertysubscribing ca...

thinkphp tp redis鎖 原始碼實現

tp5以上直接複製貼上即可,需要修改命名空間 快速使用 new redislock lock key,expire 5,num 0 返回true代表加鎖成功 可以執行後面 否則失敗 支援重試 num次,加鎖成功後 expire秒後鎖自動釋放,防止死鎖 new redislock unlock key...