scrcpy替换minicap
一、服务器端
1、获取图像:android.media.ImageReader(允许应用程序直接访问呈现表面的图像数据)。
2、传输:开一个socket服务器端口,一旦与客户端连接成功后,往客户端发送frame数据(客户端先发送一个数据过来,确认接收后服务器端才会发送数据)
3、解决Android权限问题:编译一个jar包或者apk,包含一个已经编译好的dex文件(Android字节码,可以直接运行,不用再获取系统权限),利用安卓的app_process运行启动后Android端会开启一个名字为app_process的进程。
二、客户端
1、Socket连接服务器端。
2、把frame数据保存并显示到画布。
三、兼容使用minicap客户端接收数据版本,服务端修改:
(参考文档地址:https://testerhome.com/topics/21647?locale=zh-CN
官网地址:https://github.com/Genymobile/scrcpy)
1、frame数据转jpeg数据,lib包位置如下图所示,可根据cpu版本push到设备中
2、socket启动指定端口6612,不用等待客户端发送过来请求,直接连接成功后发送jpeg数据。
3、启动服务端参数修改,主要可以设置3个参数:-Q(画质:0-100) -r (帧率:frame/sec)-P (屏幕宽度)
四、适配Android4.4
服务启动修改:minSdbVersion 21为minSdbVersion 19
客户端启动命令:
adb shell ANDROID_DATA=/data/local/tmp CLASSPATH=/data/local/tmp/server-debug.apk app_process / com.genymobile.scrcpy.Server -L
adb shell ANDROID_DATA=/data/local/tmp LD_LIBRARY_PATH=${更改为上一步返回的路径}:/data/local/tmp CLASSPATH=/data/local/tmp/server-debug.apk app_process / com.genymobile.scrcpy.Server -Q 40 -r 24 -P 450
五、客户端接收代码修改:
1、下载minicap接收数据源码
2、找到minicap接收数据部分,正常在源码的example/app.js目录下
3、修改socket连接端口,为adb forward 转发到本地的端口,连接2次(必须)
4、异常退出去掉process.exit(1) //屏蔽exit()
5、连接正常后接收到数据并保存到指定目录下