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

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

背景:

现在音视频行业很火,但是目前 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丶 #13 · 2019年12月18日 Author
青谷 回复

是的

yyy丶 回复

坐等开源,期待~

yyy丶 回复

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

青谷 回复

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

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

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

xm 回复

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

xm 回复

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

5楼 已删除

是的,可以这么理解

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

11 不支持系统级别的直播

匿名 #1 · 2020年01月03日

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

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