上头交给年后任务,开发一款用来在线教育的音视频软件,先让我先研究一下,然后规划下流程方案和技术选型,主导这个软件的开发(我会 c++,java ,另外两个会 java )。
本人无音视频开发经验也无理论知识,完全从头开始研发。
为什么不用市面上已有产品?因为要交钱,老板希望有自己的产品,方便日后扩展,升级,满足他的控制欲,为称霸扫平道路。
1 、桌面端界面使用 QT ,移动端界面使用 Flutter 或原生。
2 、业务库统一用 C++实现,多端界面端统一调用业务库(粗略了解到过程中还有交叉编译之类的,不知道是不是很复杂)。
1 、桌面端界面使用 QT ,移动端界面使用 Flutter 或原生。
2 、业务库统一用 C++实现,多端界面端统一调用业务库(粗略了解到过程中还有交叉编译之类的,不知道是不是很复杂)。
1 、通过 gRPC 传输信令,建立 WebRTC 点对点连接(这里打算直接用 P2P 建立连接,涉及到 NAT 穿透,如果穿不透,使用 TURN 做中继,用中继后所有流量都得走服务器,人一多,对服务器带宽是个挑战,基本一个 5M 带宽,最多支持 5 个一对一,那得多少带宽才能带得动)。
2 、教师通过系统 API 捕获屏幕,摄像头采集,麦克风采集,通过 ffmpeg 处理后,用 WebRTC 传输。
3 、学生端直接使用 WebRTC 显示。
使用 WebRTC 比较方便,有网络自适应。但好像只能在浏览器中使用。
WebRTC 也有 native 库(原生 native 库,metartc ),直接在 C++调用,不知道坑多不多。
采用 RTMP/RTSP 传输,ffmpeg 解码后,用 OpenSL ,OpenGL 之类自己做渲染。
1 、使用 WebRTC 方便 还是 用 RTMP/RTSP 传输后自己解码显示?
2 、如何避免/减少点对点流量对服务器造成的带宽压力?
102
capric 66 天前
你想复杂了,出个简单方案吧,教师端用 obs studio 推流,服务端用 mediamtx 或者 zlmediakit 协议转换成 fmp4 over websocket ,然后学生端基于 web 开发走 mse 播放(如果要原生开发,就是 libmpv 播放),全部都是成熟的直播开源方案,你又不要多对多,不要搞 webrtc/p2p 了,把问题搞复杂了
|
103
mioktiar56 66 天前
P2P 只是一个美好的愿景(比如 WebRTC 之类的技术方案),绝大多网络场景都穿透不了 NAT ,还得走服务器转发。
以我所见,WebRTC 只适合从其源码扣代码。 |
105
afeiche 65 天前
p2p 大概率需要找一个 turn 服务器进行打洞,坑还是挺多的,建议用厂家现成的方案,声网、腾讯这种
界面其实可以用 electron 这种方案,我们公司之前用过这种做上网课的,比 QT 开发成本要小一点,而且厂家一般都提供了 electron 的接口包的,挺方便的 |
![]() |
106
wisej 65 天前
@dnjat 1 对 1 的场景,我倒觉得 p2p 是较优方案啊。家庭 NAT 一般都是 easy NAT ,p2p 直连不是问题,除非企业环境 hard NAT 。一对一,对各自的带宽和性能要求也低,很容易满足。
当然 relay 中继的 fallback 方案可能还是要有,但是用到的概率低。整体成本的可负担性好多了 |
107
milzero 49 天前
我至少干了快十年这个了,待过 team 就没有少于 30 人的...
|
108
sgissb1 48 天前
做了小 10 多年的音视频,2014 年开始就磨改 webrtc 的经验作为过往。
不要去涉及底层技术,除非准备花钱砸一个团队出来,直接用现成的随便找一个稍微营销做的还不错的 sdk 来用,自己实现业务和界面就行了。等后续老板愿意让砸钱做的时候,再考虑。 |