STF 基于 webrtc 协议实时共享 android/ios 屏幕替换 STF 实践解决方案。

yyy丶 · 2019年12月18日 · 3960 次阅读

背景:

现在音视频行业很火,但是目前 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 方案进行开源
明年年初,敬请期待😀

共收到 13 条回复 时间 点赞
yyy丶 关于把 minitouch 移植到 APP 里的问题 中提及了此贴 12月18日 17:12

1 楼坐等,急😀

这个等于是远程真机然后可以听到声音吗?

青谷 回复

是的

yyy丶 回复

坐等开源,期待~

yyy丶 回复

不过,会有个问题啊,如果听到的音频出问题,会不会是采集传输过程出的问题呢?

青谷 回复

因为是系统采集,不同的机型上面可能会存在问题。

3 秒延迟的方案 感觉可以直觉 pass 了。
uc 的不知道什么方案 websocket 传的 h264

能顺便讲讲 客户端大概是怎么实现的嘛(iOS 端)

yyy丶 #10 · 2019年12月19日 Author
xm 回复

是通过 Replaykit 获取到 Buffer,通过硬解码,使用 socket 传输到主 app,在通过 webrtc 传输即可

yyy丶 #11 · 2019年12月19日 Author
xm 回复

不管是什么对象,传输的都是字节流

12楼 已删除
yyy丶 #13 · 2019年12月19日 Author

是的,可以这么理解

14楼 已删除

11 不支持系统级别的直播

匿名 #16 · 2020年01月03日

您好,XCEventGenerator 这个私有 API 不是在 Xcode 大于 10.2 版本中被禁止了么?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册