基于发布订阅机制的WebRTC videoroom设计

2022-01-21  本文已影响0人  夏楚子悦

一、术语

二、webrtc建连流程

图片.png

三、系统整体架构

图片.png

四、信令服务器房间状态管理

4.1 用户加入房间流程

4.2 用户退出房间流程

图片.png

五、媒体服务器集群设计

5.1 集群的目的

视频会议场景,发布流数等于房间人数N, 订阅流数为 N * (N-1), 房间人数越多,发布订阅数差距越大;随着房间人数的增加,网络环境愈加复杂多样,系统整体负载越高,基于发布订阅模式的视频会议模式,可以很好实现房间跨服务器、跨地域的实现,其主要解决问题如下:

5.2 源站、边沿站集群模式

5.3 平行集群模式

图片.png

六、信令服务器集群设计

信令服务器集群实现目的有:

图片.png

七、基于发布订阅的VideoRoom与传统模式对比

发布订阅模式(zlmediakit) 传统模式(janus) 传统模式(mediasoup) 备注
负载均衡粒度 用户(流) 房间 房间 传统模式粒度较大
房间是否可以跨地域 可以,容易实现,现成 不能 不能 传统模式难以解决就近接入体验问题
房间是否可以多线程 可以,容易实现,现成,基本无锁实现 可以,janus需要对房间上锁,分发流需要频繁线程切换 不能,单线程模型 传统模式单机性能差距明显
信令媒体解耦 相互独立,跨机部署 不能,必须同进程运行 不能,媒体部分为信令子进程
稳定性 高,线程池,线程隔离模型 低,多线程阻塞消息列队模型 高,单线程模型 janus信令业务与媒体不分,需要自行控制转发策略
可调试性 高,线程隔离清洗 低,线程模型混乱,异步多,依赖库多,出问题难定位调试 高,单线程模型 mediasoup 媒体部分寄生于typescript,媒体部分可调试性待考证
生产力 高,媒体部分c++11技术栈,基本现成,开发量少,信令部分可独立开发 低,c语言开发,手动引用技术容易出错,媒体信令业务耦合 中,媒体信令不分,信令部分为typescipt
安防、直播技术栈整合 完善,已完成整合
SDK js版本demo android sdk c++版本sdk 基本都不全面,需要二次开发封装
上一篇 下一篇

猜你喜欢

热点阅读