【活动回顾】WebRTC 服务端工程实践和优化探索
11 月 7 日,即构和上海 GDG 技术社区联合举办了实时音视频技术云上技术分享专场,来自即构科技和 Bilibili 的资深技术专家进行了深度分享。大会吸引了众多开发人员交流、观看,并在活动过程中与分享嘉宾进行了热烈互动,下面我们整理了嘉宾们分享的核心内容,错过活动直播的小伙伴可以继续观看学习。
本文是即构科技黄开宁带来的主题为《WebRTC 服务端工程实践和优化探索》的技术分享。以下为主要的分享内容:
大家下午好,我是来自即构科技的黄开宁,目前在即构科技负责音视频、媒体服务器以及网关的研发和开发,主要是架构的设计和开发,希望本次分享能让大家在 WebRTC 服务端实现或者项目选型时能带来一些思考。
接下来进入主题,今天的分享主要分为三个部分:
第一,WebRTC 服务器架构介绍及设计思路;
第二,我们开发一个服务器所需要的技术和面临的难点;
第三,QoS 服务质量的实现及优化。
一、WebRTC 服务器架构介绍和设计思路
我们首先要想一下,为什么需要 WebRTC 服务器?WebRTC 服务器它的作用是什么?在大家的认知里面,WebRTC 是谷歌开发的一个项目或者是协议,是现在大家比较熟悉的一个点对点通信方案。点对点方案是指双方浏览器之间是直接互联的,如果我们在多方会议的多方通话的情况下,我们各个通话者之间都是直连的,没有经过第三方。
下面来大概看一下它的优劣势:
优势
第一,简单。这个模型非常简单,点对点,没有经过中间的一些服务器。
第二,延迟小。既然是直连的,我们可能理所当然地认为中间除了这些路由节点之外,就没有其他地方会增加延时了。但是我后面加了一个问号,也就是说未必是这样的。熟悉我们国内运营商网络情况的都知道,联通,移动,电信之间的通信可能是不对称的,如果我是联通,你是移动,咱们直连的话,延迟未必是小的,这个就是我加了一个问号的原因。
第三,端对端带宽适应。这个指的是 WebRTC 可以根据会话者之间的网络情况、带宽情况进行适应。比如当你的接收带宽不够时,我可以降低上行编码码率来适应你,从而达到一个更好的通话效果。
劣势
第一,连通性能差。点对点之间,由于所有的网络不是在一个防火墙后,我们可能需要打洞,甚至有一些防火墙非常严格的话,我们连打洞都没办法完成,这会极大的影响服务的连通性。我们首先要发现对方,然后要打洞,如果打洞不成功,还需要通过中转服务器来进行媒体的传输,这个过程可能会快则几秒钟,慢则几分钟。也就是说我们从会话开始到双方建立通信,整个过程是非常复杂、耗费非常长的时间。
第二,带宽占用高。所有的与会者是直连的,带来的一个问题是,如果我要看到其他所有人的视频,那么每个人都需要推一路流给我。同样的,其他人也是需要接收除他以外的所有流,这时候我的上行带宽占用是非常高的。在视频会议场景下,少则十几多则二十几个人,现在几百个人的会议也是很常见的。按照我们现行的带宽,是达不到的。
第三,编解码压力大。既然每个人的流要单独发送给其他与会者,那么也要单独编解码,要发送 N 路就要编 N 路,并且编解码压力是非常大的,不仅移动端没办法承受,甚至我们的 PC 端也是没办法承受的,这是它很大的一个劣势。
在我们实际的应用场景上,如果没有服务器,那么我们也没办法进行录制,无法实现视频回播、鉴黄以及 CDN 分发等功能。综合考虑,我们就会发现点对点方案可能并没有很好的满足我们当前实际的应用需求。
所以这里就要引入一个服务器方案架构,根据刚才提到的点对点三大劣势,我们来重点看看新方案是如何解决的。
连通性
通常我们的服务器都会架构在公网上,所以各个会话者是直接跟我们在公网上的服务器建立连接,省掉了打洞,直接一步到位。
网络带宽占用高
假设当前我们这个会议有四方会话,那我的与会者有三路,我只需发一路到服务器上,通过服务器把我这一路转发给其他三路的与会者就可以了,不需要再去多发两路,这样我的上行带宽就从原本的三路变成了一路了;而接收端,引入 MCU 的概念,为了节省下行带宽,我们可以将这三路混流,再转发给我,那么我的下行也只有一路。
编解码压力小
通过优化架构带宽,编解码从原来的 N 路变成一路,也同步缓解了编解码压力。
既然服务器能更好的满足我们的实际应用,那么 WebRTC 服务器应该怎么进行架构设计呢?开发 WebRTC 服务器需要哪些技术以及可能会面临哪些难点?WebRTC 服务端 QoS(服务质量)的实现及优化有哪些重点要注意的?
篇幅关系,关于《WebRTC 服务端工程实践和优化探索》的完整内容,大家可以通过我们的活动资料包获取,资料包中还有视频回放、演讲 PPT 等资料。申请活动资料包链接https://www.wjx.top/m/97579006.aspx。
评论