背景:

现在音视频行业很火,但是目前 STF 开源框架,不支持音频。对于音视频 app 很鸡肋。

实践方案:

1、rtmp推流方式
2、webrtc协议

rtmp 解决方案:

服务器:nginx-rtmp

客户端 (android):librtmp、MediaProjectionManager 、VirtualDisplay、MediaCodec 、egl

学习成本:
1、android 音视频硬解码
2、egl 渲染相关知识,不然在 dequeueOutputBuffer 返回-1 的坑里出不来
3、rtmp 传输协议

点击方案:
优化 Scrcpy-jar InputManager 方案 。
本地在起一个 Socket 监听 (不是 LocalSocket,LocalSocket 不能跨进程通信)。
主 app 中用异步调用 shell app_process 启动 jar 包。用 socket 进行通信

缺点:rtmp 延迟 3S

webrtc 解决方案:

信令服务器:nodejs

客户端 (android/ios):webrtc

学习成本:
前端:js、webrtc
android: java、 webrtc
ios:oc 、webrtc、videoToolbox、Replaykit

原理:
android:webrtc 中提供硬解码以及录音方法 (与 rtmp 一致),只是传输协议不一致
ios:需要自行编写硬解码,在使用 webrtc 传输协议

点击方案:
android:参考 rtmp 方案
ios:基于 XCEventGenerator 点击方案 socket 通信
参考:http://www.sohu.com/a/240584209_744135

缺点:
1、webrtc 会实际情况调整分辨率,偶尔会出现模糊的情况 (基本上问题不大)
2、只支持 ios12+ 音视频,低于 ios12 建议使用图片流

开源计划:

最终选择 webrtc 方案进行开源
明年年初,敬请期待😀


↙↙↙阅读原文可查看相关链接,并与作者交流