《聊聊 WebRTC 网关服务器》系列文章系由 WebRTCon2018 中网易云信音视频技术专家的分享内容《从零开始构建音视频网关服务器》整理而成,该系列文章将和你们分享网易 NRTC 在 WebRTC 网关项目的自研过程当中遇到的一些问题,以及咱们最终的解决方法。《聊聊 WebRTC 网关服务器》第一篇文章将和你们分享如何选择服务端的端口方案。git
在讨论如何选择服务器端的端口方案前,咱们先来看看标准 WebRTC 的链接创建流程,这为咱们理解这篇文章后续内容提供最基础的知识。github
这里描述的是 Trickle ICE 过程,而且省略了通话发起与接受的信令部分。流程以下:web
在了解了标准 WebRTC 的建连流程之后,咱们来看看 WebRTC 客户端如何与网关建连。算法
首先,咱们网关的 Media Server 拥有公网 IP,所以 Server 就不须要经过 Stun Server 收集自身的公网 IP。WebRTC 客户端先与网关 Signal Server 协商 SDP,包括 ICE Candidate,Media Server 分配 IP 和端口做为网关的 ice candidate 发送给客户端。由于网关是公网 IP,因此客户端向这个 IP 发送 STUN Binding Request 会被服务器收到, 并回复 Response。接着客户端与网关媒体服务器进行 DTLS 握手与秘钥协商,在此基础上进一步进行 SRTP 的音视频通讯。至此,WebRTC 客户端与网关服务器建连成功。
好的,如今咱们已经具有了探讨服务器端端口选择的基础知识,接下来咱们来看看具体有哪些方案。安全
最简的服务器端端口方案是咱们能够为每一个客户端分配一个端口,服务器上使用这个端口区分每一个用户,就像图里描述的 A、B、C、D 四我的在 WebRTC 网关服务器上分别对应 UDP 端口 10001~1004。这种方案逻辑上很简单,不少开源的服务器都采用这个方案,如 janus。另一个缘由是使用了 libnice 库在服务器上来和客户端作 ice 建连,相似的作法都是采用多端口的架构。
那么多端口有什么不足呢?服务器
为了解决这个问题,咱们须要使用一些小技巧。首先,有几个基础知识点咱们先了解一下。以下图:微信
有了上面的背景知识,聪明的大家确定已经大体有一个方案了。咱们来看看实现细节是怎么样的:网络
在分享完服务端端口选择的方案后,你们都知道 WebRTC 客户端使用 PeerConnection 来表示不一样的媒体链接,这对于 WebRTC 来讲是基础也是核心,在《聊聊 WebRTC 网关服务器》第二篇文章将继续为你们介绍如何选择 PeerConnection 的方案。
随着音频处理和压缩技术的不断发展,效果更好、适用范围更广、性能更高的算法和新的技术必将不断涌现,若是你有好的技术或者分享,欢迎关注网易 MC 官方博客以及微信公众号:**架构
关注更多技术干货内容: 网易云信博客
欢迎关注 网易云信 GitHub
欢迎关注 网易云信官网官网微信公众号:
运维