Minicap使用分析


 想起前段時間研究過的minicap,抱着無果的心情再次看了源碼,這次竟然比上次清晰了一點點,難道是因為這兩天被android源碼折磨得身心疲憊然而卻在不知不覺中增長了?不懂怎么樣,看懂了大概。

Minicap在客戶端連接的時候,會向客戶端發送一個24字節的banner,具體格式:

banner版本、banner大小、minicap的進程id,手機真實寬度、手機真實高度、期望寬度、期望高度、期望手機屏幕方向、quirks貌似是顯示模式.

之后會向客戶端發送當前屏幕截圖的二進制流,這里直接分析example/下的app.js

第一個if是為了接收第一個響應,既解析banner.

之后才是接收圖片信息

        else if (readFrameBytes < 4) {
          // 前4個byte是 frameBodyLength
          frameBodyLength += (chunk[cursor] << (readFrameBytes * 8)) >>> 0
          cursor += 1
          readFrameBytes += 1
          console.info('headerbyte%d(val=%d)', readFrameBytes, frameBodyLength)
        }

之后的接收到響應的每個chunk是一個Buffer對象,前4個字節代表當前chunk的長度(單位是byte),由於屏幕截圖可能很大,可能到2-6M大小,所以會多次觸發客戶端的read方法,用來分片發送圖片,所以需要一個容器把每次接收到的圖片片段存儲起來,frameBody就是這個容器:

接收完了之后,就可以把圖片顯示出來:

也可以把buffer寫入一個jpg文件看看是不是圖片數據。

要完全理解還需要c++的線程,android的機制,整好android源碼再看這部分吧。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM