上头交给年后任务,开发一款用来在线教育的音视频软件,先让我先研究一下,然后规划下流程方案和技术选型,主导这个软件的开发(我会 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 、如何避免/减少点对点流量对服务器造成的带宽压力?
这中间有的地方可能理解得不对🐞,希望得到大佬们的批评指点🌻。如果有不错的学习资源,帮忙推荐一下🎁。
|