(水平有限,把我分析的和猜測的記錄下來)
在學習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...