V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
dnjat
V2EX  ›  程序员

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

  •  
  •   dnjat · 67 天前 · 5045 次点击
    这是一个创建于 67 天前的主题,其中的信息可能已经有所发展或是发生改变。

    上头交给年后任务,开发一款用来在线教育的音视频软件,先让我先研究一下,然后规划下流程方案和技术选型,主导这个软件的开发(我会 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 、如何避免/减少点对点流量对服务器造成的带宽压力?

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

    第 1 条附言  ·  67 天前
    软件需求贴错了,不能修改了。
    软件需求:
    一对一的模式,一方开启投屏(教师端),另一方进行观看(学生端),支持语音对话(后期可能会扩展荧光笔这类标记功能)。
    支持多端,桌面端(windows,mac),手机平板端(andorid,ios)。每个端都支持教师与学生。
    108 条回复    2025-02-10 16:59:36 +08:00
    1  2  
    dnjat
        101
    dnjat  
    OP
       66 天前
    @simo 这技术水平,看能勉强二开不.我们三就不造原子弹了.😂.
    capric
        102
    capric  
       66 天前
    你想复杂了,出个简单方案吧,教师端用 obs studio 推流,服务端用 mediamtx 或者 zlmediakit 协议转换成 fmp4 over websocket ,然后学生端基于 web 开发走 mse 播放(如果要原生开发,就是 libmpv 播放),全部都是成熟的直播开源方案,你又不要多对多,不要搞 webrtc/p2p 了,把问题搞复杂了
    mioktiar56
        103
    mioktiar56  
       66 天前
    P2P 只是一个美好的愿景(比如 WebRTC 之类的技术方案),绝大多网络场景都穿透不了 NAT ,还得走服务器转发。

    以我所见,WebRTC 只适合从其源码扣代码。
    firenine
        104
    firenine  
       65 天前
    @capric 语音要求实时的,基于 TCP 的延迟控制不住
    afeiche
        105
    afeiche  
       65 天前
    p2p 大概率需要找一个 turn 服务器进行打洞,坑还是挺多的,建议用厂家现成的方案,声网、腾讯这种
    界面其实可以用 electron 这种方案,我们公司之前用过这种做上网课的,比 QT 开发成本要小一点,而且厂家一般都提供了 electron 的接口包的,挺方便的
    wisej
        106
    wisej  
       65 天前
    @dnjat 1 对 1 的场景,我倒觉得 p2p 是较优方案啊。家庭 NAT 一般都是 easy NAT ,p2p 直连不是问题,除非企业环境 hard NAT 。一对一,对各自的带宽和性能要求也低,很容易满足。
    当然 relay 中继的 fallback 方案可能还是要有,但是用到的概率低。整体成本的可负担性好多了
    milzero
        107
    milzero  
       49 天前
    我至少干了快十年这个了,待过 team 就没有少于 30 人的...
    sgissb1
        108
    sgissb1  
       48 天前
    做了小 10 多年的音视频,2014 年开始就磨改 webrtc 的经验作为过往。
    不要去涉及底层技术,除非准备花钱砸一个团队出来,直接用现成的随便找一个稍微营销做的还不错的 sdk 来用,自己实现业务和界面就行了。等后续老板愿意让砸钱做的时候,再考虑。
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3515 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 04:26 · PVG 12:26 · LAX 21:26 · JFK 00:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.