首先我不会Linux ,只会Win系统,我不会C#、C++和JAVA,我会些GOLANG基础和易语言
看scrcpy-server和ffmpeg的源码根本看不懂,所以遇到难度,求爱心人帮解决。
我的对于scrcpy-server的步骤如下:
1、上传到手机:adb push scrcpy-server /data/local/tmp/scrcpy-server.jar
2、提升权限:adb shell chmod 0755 /data/local/tmp/scrcpy-server.jar
3、添加映射:adb forward tcp:3031 localabstract:scrcpy
4、启动应用服务:adb shell CLASSPATH=/data/local/tmp/AuxControl.jar app_process / com.genymobile.scrcpy.Server 1.24 tunnel_forward=true control=false
5、自己用golang编写TCP客户端,连接3031端口,收到实时视频流数据,但是一直没有办法解决沾包问题。
通过外网寻找scrcpy-server 相关资料,得到的是(手机服务端在发送一帧数据包前,会先发送pts 信息,和包长度,所以在客户端进行解码这部分的视频流的时候,先取出12个字节,其中8个字节是long类型,为pts时间戳,4个字节是数据包长度,意味着这一帧的长度,只有将这个长度的内容完整读取,才能正常渲染,如果某一次因为缓冲没有读取完,那只有等待下次继续读取,直到读取到数据的尾部。最后送显),括号的解释看似简单,我采用GO和易语言读取12个字节,在读取后4个字节,一直得不到数据流的真实数据长度。
对于ffmpeg,看不懂源码,更不知道怎么调用DLL来实现。
如果你能解决的问题,参考以下任何一种方式来解决:
1、对于JAVA,直接修改scrcpy-server源码实现,发送完整包,不要分包发送。也可以改为Web Socket方式转发出来,不需要转码,只要完整的H264
2、对于C语言,写成DLL,动态创建Web Socket把数据转发出来
3、关于ws-scrcpy,我是一直没有安装成功过包括WIN和LInux,但是有个docker版本,安装成功了,但是不能控制,对与ws-scrcpy也是不熟悉,NODEJS代码还好,里面又包含了其他的一种语言,至于怎么接收屏幕数据到显示,在到控制等消息格式,更是不清楚。