webRTC之Mesh/MCU/SFU通信架构区别(九)

WebRTC多人通信架构:Mesh、MCU与SFU详解
本文详细介绍了WebRTC多人通信的三种常见架构:Mesh、MCU和SFU。Mesh方案下,每个参与者需要直接与其他参与者共享媒体流,适合小规模通信但资源占用高。MCU方案通过服务器混流,提供一致的用户体验但存在延迟和资源消耗问题。SFU作为媒体路由器,直接转发流,保持低延迟且资源消耗小,但可能面临同步和一致性挑战。Simulcast和SVC模式则为适应不同网络和终端提供了灵活性。

Webrtc一对一的通信,通常采用的是端到端的方式,那如果多人通信的架构方案一般有这三种常见的方案

Mesh方案

即多个终端之间两两进行连接,形成一个网状结构。比如 A、B、C 三个终端进行多对多通信,当 A 想要共享媒体(比如音频、视频)时,它需要分别向 B 和 C 发送数据。同样的道理,B 想要共享媒体,就需要分别向 A、C 发送数据,依次类推。这种方案对各终端的带宽要求比较高。
avatar
当某个浏览器想要共享它的音视频流时,它会将共享的媒体流分别发送给其他 3 个浏览器,这样就实现了多人通信。这种结构的优势有如下:

  • 不需要服务器中转数据,STUN/TUTN 只是负责 NAT 穿越,这样利用现有 WebRTC 通信模型就可以实现,而不需要开发媒体服务器。
  • 充分利用了客户端的带宽资源。
  • 节省了服务器资源,由于服务器带宽往往是专线,价格昂贵,这种方案可以很好地控制成本。

劣势:

  • 共享端共享媒体流的时候,需要给每一个参与人都转发一份媒体流,这样对上行带宽的占用很大。参与人越多,占用的带宽就越大。除此之外,对 CPU、Memory 等资源也是极大的考验。一般来说,客户端的机器资源、带宽资源往往是有限的,资源占用和参与人数是线性相关的。这样导致多人通信的规模非常有限,通过实践来看,这种方案在超过 4 个人时,就会有非常大的问题。
  • 另一方面,在多人通信时,如果有部分人不能实现 NAT 穿越,但还想让这些人与其他人互通,就显得很麻烦,需要做出更多的可靠性设计。

MCU 方案(MultiPoint Control Unit)

MCU 主要的处理逻辑是:接收每个共享端的音视频流,经过解码、与其他解码后的音视频进行混流、重新编码,之后再将混好的音视频流发送给房间里的所有人。

MCU 技术在视频会议领域出现得非常早,目前技术也非常成熟,主要用在硬件视频会议领域。不过我们今天讨论的是软件 MCU,它与硬件 MCU 的模型是一致的,只不过一个是通过硬件实现的,另一个是通过软件实现的罢了。MCU 方案的模型是一个星形结构,如下图所示:

avatat
我们来假设一个条件,B1 与 B2 同时共享音视频流,它们首先将流推送给 MCU 服务器,MCU 服务器收到两路流后,分别将两路流进行解码,之后将解码后的两路流进行混流,然后再编码,编码后的流数据再分发给 B3 和 B4。

对于 B1 来说,因为它是其中的一个共享者,所以 MCU 给它推的是没有混合它的共享流的媒体流,在这个例子中就是直接推 B2 的流给它。同理,对于 B2 来说 MCU 给它发的是 B1 的共享流。但如果有更多的人共享音视频流,那情况就更加复杂。

MCU 主要的处理逻辑如下图所示:
avatar

  1. 接收共享端发送的音视频流。
  2. 将接收到的音视频流进行解码。
  3. 对于视频流,要进行重新布局,混合处理。
  4. 对于音频流,要进行混音、重采样处理。
  5. 将混合后的音视频进行重新编码。
  6. 发送给接收客户端。

优点

  • 技术非常成熟,在硬件视频会议中应用非常广泛
  • 作为音视频网关,通过解码、再编码可以屏蔽不同编解码设备的差异化,满足更多客户的集成需求,提升用户体验和产品竞争力。
  • 将多路视频混合成一路,所有参与人看到的是相同的画面,客户体验非常好。

缺点

  • 重新解码、编码、混流,需要大量的运算,对 CPU 资源的消耗很大。
  • 重新解码、编码、混流还会带来延迟。
  • MCU服务器的压力较大,需要较高的配置。

SFU(Selective Forwarding Unit)

SFU 像是一个媒体流路由器,接收终端的音视频流,根据需要转发给其他终端。SFU 在音视频会议中应用非常广泛,尤其是 WebRTC 普及以后。支持 WebRTC 多方通信的媒体服务器基本都是 SFU 结构。SFU 的拓扑机构和功能模型如下图:
av
在上图中,B1、B2、B3、B4 分别代表 4 个浏览器,每一个浏览器都会共享一路流发给 SFU,SFU 会将每一路流转发给共享者之外的 3 个浏览器。

下面这张图是从 SFU 服务器的角度展示的功能示意图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lVbzLWlM-1591512514956)(在这里插入图片描述
相比 MCU,SFU 在结构上显得简单很多,只是接收流然后转发给其他人。然而,这个简单结构也给音视频传输带来了很多便利。比如,SFU 可以根据终端下行网络状况做一些流控,可以根据当前带宽情况、网络延时情况,选择性地丢弃一些媒体数据,保证通信的连续性。

目前许多 SFU 实现都支持 SVC 模式和 Simulcast 模式,用于适配 WiFi、4G 等不同网络状况,以及 Phone、Pad、PC 等不同终端设备。

优点

  • 由于是数据包直接转发,不需要编码、解码,对 CPU 资源消耗很小
  • 直接转发也极大地降低了延迟,提高了实时性。
  • 带来了很大的灵活性,能够更好地适应不同的网络状况和终端类型。

缺点

  • 由于是数据包直接转发,参与人观看多路视频的时候可能会出现不同步;相同的视频流,不同的参与人看到的画面也可能不一致。
  • 参与人同时观看多路视频,在多路视频窗口显示、渲染等会带来很多麻烦,尤其对多人实时通信进行录制,多路流也会带来很多回放的困难。总之,整体在通用性、一致性方面比较差。
  • 每个端需要建立一个连接用于上传自己的视频,同时还要有N-1个连接用于下载其它参与方的视频信息,消耗的带宽也是最大的(带宽比较烧钱)

通过上面的分析和比较,相信你已经有了一个大概的认知。如何选择架构方案还需要根据业务场景来判断,没有最好的是只有最适合的。

1.Simulcast 模式

所谓 Simulcast 模式就是指视频的共享者可以同时向 SFU 发送多路不同分辨率的视频流(一般为三路,如 1080P、720P、360P)。而 SFU 可以将接收到的三路流根据各终端的情况而选择其中某一路发送出去。例如,由于 PC 端网络特别好,给 PC 端发送 1080P 分辨率的视频;而移动网络较差,就给 Phone 发送 360P 分辨率的视频。

Simulcast 模式对移动端的终端类型非常有用,它可以灵活而又智能地适应不同的网络环境。下图就是 Simulcast 模式的示意图:
avatar

2. SVC 模式

SVC 是可伸缩的视频编码模式。与 Simulcast 模式的同时传多路流不同,SVC 模式是在视频编码时做“手脚”。

它在视频编码时将视频分成多层——核心层、中间层和扩展层。上层依赖于底层,而且越上层越清晰,越底层越模糊。在带宽不好的情况下,可以只传输底层,即核心层,在带宽充足的情况下,可以将三层全部传输过去。

同一路流,分成了多具层,核心层,护展层和边缘层,当带宽不足时,由上层逐渐丢弃!

如下图所示,PC1 共享的是一路视频流,编码使用 SVC 分为三层发送给 SFU。SFU 根据接收端的情况,发现 PC2 网络状况不错,于是将 0、1、2 三层都发给 PC2;发现 Phone 网络不好,则只将 0 层发给 Phone。这样就可以适应不同的网络环境和终端类型了。

avatar

总结

  1. 由于各方面限制,Mesh 架构在真实的应用场景中几乎没有人使用,一般刚学习 WebRTC 的才会考虑使用这种架构来实现多方通信。(可以简单了解下)
  2. MCU 架构是非常成熟的技术,在硬件视频会议中应用非常广泛。像很多做音视频会议的公司之前都会购买一套 MCU 设备,这样一套设备价格不菲,最低都要 50 万,但随着互联网的发展以及音视频技术越来越成熟,硬件 MCU 已经逐步被淘汰,当然现在也还有公司在使用软 MCU,比较有名的开源项目是 FreeSWITCH。
  3. SFU 是最近几年流行的新架构,目前 WebRTC 多方通信媒体服务器都是 SFU 架构。从上面的介绍中你也可以了解到 SFU 这种架构非常灵活,性能也非常高,再配上视频的 Simulcast 模式或 SVC 模式,则使它更加如虎添翼,因此SFU模式已经渐渐成为主流了。
  4. 目前的实际应用中,使用Simulcast比使用SVC多,webRTC对两种都支持
<think>好的,我现在需要回答用户关于WebRTC网关在WebRTC架构中的位置及作用的问题。首先,我得回顾之前提供的回答和引用的资料,确保信息一致且准确。用户已经得到了一个比较详细的回答,但可能希望更具体地了解网关在架构中的位置和功能。 首先,根据引用[1],WebRTC网关用于解决点对点架构无法支持大规模并发的问题,引入服务端。这说明网关在架构中充当服务端的角色,帮助扩展WebRTC的应用范围。引用[3]提到MeshMCUSFU架构,而用户之前的回答中也提到网关可能采用混合模式(如MCU+SFU)。所以需要明确网关在这些架构中的位置。 然后,引用[4]介绍了Janus网关作为通用服务器,通过插件支持不同功能,这显示网关作为中间层,处理信令和媒体流。结合引用[5],WebRTC的三个主要知识点是MediaStream、RTCPeerConnection和RTCDataChannel,网关可能需要与这些组件交互。 接下来,我需要组织回答的结构。首先明确位置,可能是在服务端,连接WebRTC客户端与其他系统。然后分点讨论作用,比如协议转换、媒体处理、网络穿透支持等。需要结合引用中的例子,比如即构科技的实践(引用[1])、Janus的插件架构(引用[4])、混合架构(引用[3])。 还要注意用户提到的“具体位置”,可能需要图示,但文本描述应清晰。例如,网关位于WebRTC客户端与传统通信系统之间,处理信令和媒体转发。同时,引用中的不同架构MeshSFUMCU)会影响网关的具体实现方式,比如在SFU中网关负责流转发,而在MCU中则进行混流。 需要确保回答覆盖网关的核心作用,如协议转换、扩展性、网络穿透辅助,并引用相关文献支持。例如,协议转换部分可以引用[1]中的服务端架构实践,网络穿透引用[3]的STUN/TURN。同时,结合用户之前的回答中的内容,但避免重复,增加更多具体细节。 可能还需要比较不同架构下网关的作用差异,比如在MCU+SFU混合模式中,网关同时处理混流和转发,如引用[3]所述。此外,Janus的例子(引用[4])说明网关通过插件实现多功能,这也应提到。 最后,检查是否回答了用户的问题:位置(架构中的服务端层,连接客户端与其他系统),作用(协议转换、媒体处理、网络穿透、负载均衡)。确保每个部分都有引用支持,如[1]、[3]、[4]。 总结来说,结构应该是先明确位置,再分点详细作用,结合引用中的案例和技术细节,确保回答准确且符合用户需求。</think>### WebRTC网关在WebRTC架构中的位置与作用 WebRTC网关在WebRTC架构中处于**服务端中间层**,是连接WebRTC终端与其他通信系统的核心枢纽。其具体位置和作用如下: --- #### 一、**架构中的位置** 1. **位于WebRTC终端与非WebRTC系统之间** - **核心角色**:作为服务端代理,网关处于WebRTC客户端(如浏览器、移动端)与传统通信系统(如SIP电话、RTMP直播平台)的中间层,负责双向协议转换与媒体流中继。 - **示例**:在视频会议中,浏览器通过WebRTC与网关通信,网关再将媒体流转发至SIP会议室系统或RTMP直播平台[^1][^3]。 2. **与WebRTC核心组件的关系** - **RTCPeerConnection的中继节点**:网关通过处理SDP协商(如ICE候选地址交换)和媒体流传输(RTP/RTCP),辅助建立跨网络连接[^5]。 - **与TURN/STUN服务器的协同**:在复杂网络环境下,网关可能集成或依赖TURN服务器(如coturn)实现中继穿透,确保连接成功率[^1][^3]。 --- #### 二、**核心作用** 1. **协议转换与互操作性** - **媒体协议转换**:将WebRTC的SRTP/DTLS加密流转换为RTMP、RTSP、HLS等协议,适配传统设备(如监控摄像头)或直播平台[^2]。 - **信令协议适配**:将WebRTC的JSON信令(如通过WebSocket)转换为SIP、HTTP/REST等协议,实现与电话系统的互通[^4]。 2. **网络穿透与连接优化** - **ICE框架支持**:网关辅助完成STUN(公网IP发现)和TURN(中继转发)流程,解决对称NAT或防火墙导致的P2P连接失败问题[^1][^3]。 - **负载均衡**:通过分布式部署网关节点(如Kubernetes集群),分散高并发场景下的媒体处理压力[^1]。 3. **媒体处理与分发** - **SFU模式**:仅转发媒体流(不混流),降低延迟,适用于大规模互动直播(如千人会议)[^3]。 - **MCU模式**:混流+转码(如将多路视频合成单画面),适配带宽受限的终端设备[^3]。 - **混合架构**:结合SFUMCU(如即构科技的实践[^1]),动态选择最优处理方式。 4. **安全与扩展性** - **流量过滤**:在企业级部署中,网关可拦截恶意流量或加密敏感数据(如医疗影像传输)[^1]。 - **插件化扩展**:通过插件架构(如Janus网关[^4]),灵活支持视频录制、AI降噪等定制功能。 --- #### 三、**典型架构示意图** ``` WebRTC终端(浏览器/App) │ ▼ WebRTC网关(协议转换+媒体处理) │ ├──→ SIP电话系统(信令:SIP,媒体:RTP) ├──→ RTMP直播平台(媒体:RTMP) └──→ 物联网设备(媒体:RTSP) ``` *注:网关在此架构中作为“协议翻译器”和“流量调度中心”存在。* --- #### 四、**技术实现参考** - **Janus网关**:通过插件机制支持多种场景(如视频房间、直播推流),其核心仅处理信令中继和RTP转发,具体业务逻辑由插件实现。 - **即构科技实践**:采用MCU+SFU混合模式,针对不同业务需求动态切换媒体处理策略(如教育场景用SFU低延迟,会议场景用MCU降带宽)[^1]。 --- ### 总结 WebRTC网关在WebRTC架构中**填补了P2P模式的局限性**,通过服务端中间层实现: 1. 跨协议互通(如WebRTC↔SIP) 2. 大规模并发支持(SFU/MCU负载均衡) 3. 网络穿透保障(TURN/STUN集成) 其设计需结合具体业务需求,例如Janus的插件化灵活性与即构的混合架构优化[^1][^3][^4]。 --- ### 相关问题 1. Janus网关的插件机制如何实现与SIP系统的对接?[^4] 2. 在MCU+SFU混合架构中,如何动态选择媒体处理模式?[^1][^3] 3. WebRTC网关与TURN服务器的部署关系是怎样的?[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值