想起前段时间研究过的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源码再看这部分吧。

最新文章

  1. Handler系列之原理分析
  2. BZOJ3505 [Cqoi2014]数三角形
  3. lua学习之table类型
  4. ES6 - for...of
  5. SQL总结(三)其他查询
  6. VS小技巧
  7. ArrayList和Iterator的用法
  8. centos Supervisor
  9. [MODx] 3. Working with chunks, TV, Category
  10. 深入分析 Java 中的中文编码问题--转
  11. 自己开发的轻量级gif动画录制工具
  12. 恢复Windows 10自带的微软正黑字体
  13. Python 解析 XML 文件生成 HTML
  14. GridView和DataFormatString 日期格式 精确小数点后位数
  15. 您需要来自XXX的权限才能对此文件夹进行更改
  16. SolrJ案例实现搭建环境——(十五)
  17. maven下载源代码,中文注释乱码的处理方法
  18. Zabbix基本功能使用手册
  19. C#多线程编程实战1.6线程优先级
  20. web service的理解

热门文章

  1. week3a:个人博客作业
  2. PHP 常用函数总结(一)
  3. C++模板常用功能讲解
  4. background的使用
  5. ZooKeeperACL机制
  6. JVM学习笔记(一):Java内存区域
  7. MT【162】渐近估计
  8. FFT常数优化(共轭优化)
  9. 【算法】Tarjan大锦集
  10. Valid Parentheses - LeetCode