如何开发一款会议室(音视频)产品?好像有点难

227 天前
 dnjat

上头交给年后任务,开发一款用来在线教育的音视频软件,先让我先研究一下,然后规划下流程方案和技术选型,主导这个软件的开发(我会 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 比较方便,有网络自适应。但好像只能在浏览器中使用。

WebRTC 也有 native 库(原生 native 库,metartc ),直接在 C++调用,不知道坑多不多。

不使用 WebRTC:

采用 RTMP/RTSP 传输,ffmpeg 解码后,用 OpenSL ,OpenGL 之类自己做渲染。

疑问:

1 、使用 WebRTC 方便 还是 用 RTMP/RTSP 传输后自己解码显示?

2 、如何避免/减少点对点流量对服务器造成的带宽压力?

这中间有的地方可能理解得不对🐞,希望得到大佬们的批评指点🌻。如果有不错的学习资源,帮忙推荐一下🎁。

7004 次点击
所在节点    程序员
108 条回复
maxwel1
227 天前
你们三个搞下来,成本肯定要比直接外采多的多。当然不一定能搞出来
foxhunt
227 天前
说真的,这个东西重要的是稳定性和用户体验
自己搞,真的划不来
HenryDai
227 天前
我觉得要兼顾稳定性和可用性,从 0 到 1 太难了,吃力不讨好。可以看看 jitisi ,我之前给我的领导部署和魔改过 我觉的效果还算不错,开源协议友好。https://jitsi.org/
dnjat
227 天前
@foxhunt 一对一,三路吧。一路教师屏幕,两路双方摄像头。 翻阅了资料,确实开发也很难,还没算开发出来后的运营成本。
dnjat
227 天前
@maxwel1 是的,算下来,投入是很大。三个人搞一年就是多少工资了,还有后期带宽,觉得也是个大头。看扣开源代码这条路看还有戏没了。
dnjat
227 天前
@HenryDai 噢,你在 jitisi 上二次开发过,这经验太好了,至少在魔改的过程中,能坚信它是能成功的。这个从 0 到 1 的魔改过程,你花费了多久?方便分享下嘛
HenryDai
227 天前
@dnjat 我记得当时我和另一个同事改起来十分吃力(比如要改按钮的位置无从下手),哈哈哈,我建议是根据官方的配置修改一下配置就好了(比如更换图标,换个背景啥的),跳转到私有化的 jitsi 这样子的。
vopsoft
227 天前
口罩刚开始时 常见的视频会议都崩溃过 只有 zoom 没事 事实上日常用 zoom 也优于其他视频会议。zoom 作者原是负责思科会议的。这东西还是有很高的壁垒的。楼上说的对 直接用声网的 SDK 吧
dnjat
227 天前
@HenryDai 好的,谢谢,我去研究了解下。
dnjat
227 天前
@vopsoft 嘿嘿,好的,大家都谈虎色变,看来这家伙确实不好惹。😊
ysc3839
227 天前
Open WebRTC Toolkit 就完事了,客户端用 Electron 等浏览器套壳方案,服务端是 Node.js 。
awing
227 天前
我们自己从头用 Rust 开发了 SFU 服务端(我们有自己的 P2P 和 SFU 融合模式),当然也支持集群: https://github.com/binbat/live777

可以把 SFU 作为中间件,业务流程(业务用异构问题也不大)基本上可以不去处理音视频相关的东西。当然也可以找我们要技术支持

其他的同类产品

比较高级的封装可以考虑:livekit, jitsi

更底层的 SFU 服务可以考虑:mediamtx, atm0s

* * *

> 1 、使用 WebRTC 方便 还是 用 RTMP/RTSP 传输后自己解码显示?

RTMP/RTSP 已经半截入土了,没有兼容其他系统需求的话,没必要用

> 2 、如何避免/减少点对点流量对服务器造成的带宽压力?

如果只有一个老师和一个学生的情况,可以考虑在这种情况下用 P2P 。不过这样如果有录制需求就需要单独的处理逻辑
mgrddsj
227 天前
除了上面说的 Jitsi ,也可以参考一下 OvenMediaEngine ,也是开源的。Jitsi 似乎是用 Java/Kotlin 开发的,而 OvenMediaEngine 是 C++ 的。而且 Oven 系列也有一些现成的客户端配套的东西。

不过我没用这玩意进行过二次开发,只是部署过它,但它文档里也有一些二次开发相关的指南。仅供参考。
wnpllrzodiac
227 天前
买个服务得了,零基础上强度。没个三年能出来?
dnjat
227 天前
@ysc3839 听了大佬们的建议,打消了从头开发的想法,大家推荐了很多超出我认知的三方框架,了解后也觉得他们的支持非常好,后面要站在巨人的肩膀上,它们非常重要.谢谢建议.
dnjat
227 天前
@awing 能把这个框架从头开发,你们团队太历害了.后面拜读下项目,更详细了解下.
同类产品,上面许多大佬推荐了优秀开源框架,了解后,感觉 livekit 会比 jitsi 支持更的 API,二次开发的灵活性会更高一点.但 jitsi 好像更热门一点,后面都测试一下,看下效果如何.
P2P 的情况,我们打算优先点对点,不走服务器.录制另外想办法,或提供另外的录屏方案.
就 P2P,两个不同的外网,穿透到两个不同局域网,不知道建立 P2P 容易不(不修改任何其它网络设备的情况下).
abelmakihara
227 天前
这种能买服务的想想就知道有多复杂了
不复杂能卖服务?
varxo
227 天前
livekit
dnjat
227 天前
@mgrddsj 哇,这个 OME 很适合做一对多(直播)的这种情况,收藏了.谢谢大佬的珍藏分享. 因为我们都没有经验,感觉 Jitsi 做一对一,和多端的情况下会支持多一点,Jitsi 感觉会更适合快速开发些.感觉分享,这样在碰到任何场景会有更多应对方案,不像刚开始,想着从头开发.😊
dnjat
227 天前
@wnpllrzodiac 不打算从头开发了,通过大佬们的推荐,又看到了希望,看能不能通过优秀开源框架,捣鼓出一个最小可用方案.实在不行,就只能买服务了.通过大家知道,很多大佬都研究过这方面,确实大多都是回答要处理点很多,没经验更别提了,自己研发周期太长,结果效果还未知.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1107182

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX