QScrCpy源码解析(4)获取手机端数据知识补充
一.知识点补充
1.abd
adb是用来在电脑端对手机进行调试的一个控制程序,通过命令行启动,adb会解析你的命令,对手机进行相对应的控制目前,主流的设备系统都支持adb调试,安卓,鸿蒙,澎湃等
2引入scrcpy.sever
scrcpy.sever是一个运行在安卓系统上的脚本(国产系统大多进行了兼容)服务,可以获取安卓手机的屏幕信息,然后压缩成h.264格式发送给电脑
3端口映射(采用127.0.0.0系列的本地ip)
A db中存在一种端口映射的机制,他可以使得adb forward进行手机端的电脑端端口的映射
我们在电脑端监听对应的端口,当手机的信息发送到设定好的映射端口之后,a db就会自动的把数据传递给我们,电脑端监听对应的端口收到信息之后就可以进行数据的读取,以此达成电脑端和手机端进行通信的目的。
此时,如果采用的方式是USB进行连接,传输的数据会直接通过USB线进行发送,默认的传输协议是TCP,而不会经过网卡,如果是WIFI进行连接的话,首先,我们需要打开手机的一个局域网IP热点,他会通过网卡进行一个数据的传输。
adb的端口映射,最终目的是为了绕过防火墙的机制,我们在使用adb的时候,一般会以管理员进行程序的执行,同时,我们电脑端和手机端的端口映射使用的一般是本地的IP地址,防火墙对于本地的IP 一般是不做限制的,并且我们使用的端口是5555,这个端口一般防火墙不会重点关注。
A db的端口应试,它又分为正向隧道和反向隧道两种。在本项目中,我们需要让设备中的数据传递到我们的电脑中,所以本次我们采用正向隧道的方法。
3手机端的视频硬件加速和视频推理服务
手机端的执行流程大概是通过scrcpy.sever进行一个视频推流(非截图方式,采用的是手机端的mediacodec硬件进行数据编码的加速,mediaprojection进行捕获屏幕和创建虚拟显示器)暂不详细讨论
而这一切都需要启动视频推流服务,启动之后,可以对当前端口的服务器进行一个优化,以及指定视频推流协议
4 h.264
H点264格式是视频压缩的一种算法格式,通过这样的压缩算法,可以将数据量大大的压缩,从而提升传输的一个效率,同时也不会过分的压缩导致服务端和客户端编码解码的困难。
5FM pack
FM peck可是用来对于数据进行解码和封装的一种工具,当我们的电脑端接收到手机端发送来的数据之后,可以用FM pack进行数据的解析,得到一个未压缩的数据,Yu v或者rgb格式
6OpenGL
使用OpenGL进行屏幕的一个渲染QT中内置的有一个q openglwidget类,可以快速的渲染得到的数据