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

230 天前
 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 、如何避免/减少点对点流量对服务器造成的带宽压力?

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

7044 次点击
所在节点    程序员
108 条回复
dnjat
229 天前
@abelmakihara 初生牛犊不怕虎,驰骋代码界多年,我们有迷之自信,誓做攻无不克的 coding boy,不踢到钢板绝不喊疼.现在知道他的历害了😂. 听了大佬们的经验之谈,不打算从 0 开发了.看到推荐的这么多优秀框架,自信好像又回来一点了.😊
xsen
229 天前
livekit/openvidu/mediasoup

其实,最简单就是接入第三方,直接 sdk 接入;除非有私有云部署需求
calvinHxx
229 天前
客户端、业务后台自己开发吧。 音视频服务采购第三方 SDK 吧。降噪、弱网、传输协议都是技术难点。传统 RTMP/RTSP 弱网不够用。
newbeelity
229 天前
感觉要有架构师或者产品角色,理一份成本表,3 个研发按照资深程度,200 万/年。同样买产品 xx 万。自研优势可控、劣势周期长,效果一般
dnjat
229 天前
@varxo livekit 粗略了解后,很适合我们.这个开源方案很优秀.谢谢推荐分享.🦀
dnjat
229 天前
@xsen 我们现在也把接入三方 SDK 做为最优选择了,这个音视频不好惹,功力还不够. 先尝试简单的解决方案,接触多了,可能经验会有所积累,来日再杀一个回马枪.
dnjat
229 天前
@calvinHxx 对于我们小白,借助三方库是我们能继续在这条路上走的唯一选择了(#8 楼已经把难点列出来了🤣). 目前我们也只能站在巨人的基础上做个二次开发,把整个流程打通下来.没有经验积累,那些难点确实只能绕过了.
dnjat
229 天前
@newbeelity 嘿嘿,当时想得太简单了,本想着一个人开发核心库的,到时另外两个同事帮下忙,做个多端适配什么的.结果大佬们帮我们一分析这个产品的难点和开发周期.这成本一下就摆在那了,根本不适合.所以借助大家推荐的优秀开源项目,再折腾一把.
lidedongsn
229 天前
第一步使用三方 商用解决方案 SDK ,先把业务跑起来,同时学习理论概念,并尝试用开源解决方案自行搭建,慢慢替换
Censhuang
229 天前
在线教育吗?用过猿辅导,他们看起来是直接把课件下发到 ppt 里,笔记和荧光笔同步。发现用的课件是我能按住鼠标左键把图片拉下来放到别处。主讲老师漏个脸,网络不好就让把老师那个摄像头关了,听声音就行。
mightybruce
229 天前
我觉得你们做不到这种需要专门音视频知识的开发,最简单的做法还是用别人的音视频会议服务器项目做二次开发,
这方面有 openmeetings,jitsi desktop, bigbluebutton.

openmeetins 是在 kurento 之上开发的,用到的音视频处理服务器比如 kurento, janus 也可以了解了解。

此外音视频最大的开支是 CDN 和 服务器带宽,这点你得多问问云厂商和不同的 ISP, 否则效果很差。
lefer
229 天前
市面上有很成熟的产品了,而且本身就是非常复杂的产品。

话说,既然要用来 [在线教育] ,为啥要重新开发,而不是用市面上成熟的产品呢?
mightybruce
229 天前
openmeetings 是最贴近在线教育的功能的,不过二次开发不太好弄。音视频的带宽和 CDN 是一定要花钱买的,除非你们做的是那种没几个人用的产品。
mightybruce
229 天前
如果你们找第三方专门做音视频会议和直播视频流的厂商来通过 SDK 做二次开发,可以看看声网。
https://www.shengwang.cn/
xz410236056
229 天前
@leonlx c# + MAUI ,从桌面到移动端一把梭
mingtong
229 天前
做出 Hello world 容易,做出能稳定使用的产品很难,花的钱不会少。
专做视频会议软件的公司,做了 30 年,千八百号人。
你老板想几个人几个月就搞出来。
newshbb
229 天前
所以才有声网
haoz1w0w
229 天前
声网、zego 、腾讯云,成熟方案
javalaw2010
229 天前
点对点不现实,商业产品这么做自己找死。
直接上大厂的 RTC 云服务,你们专心搞业务逻辑就好了,基础设施的东西交给专业的人去弄。
bugu1986
229 天前
agora

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

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

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

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

© 2021 V2EX