Janus网关的集成与优化

大家好,我是李桥平,来自学霸君上海互动产品研发中心,本次分享的主题是Janus网关的集成与优化 。Janus网关是WebRTC的媒体服务器,它可以接收来自WebRTC客户端的音视频数据,根据业务需要对媒体数据进行处理,再转发到其他WebRTC客户端上, 以此完成音视频互动 。

Janus网关的集成与优化

文章插图
 
本次分享的主要内容是如何把Janus网关集成到我们公司内部的自研RTC系统中,并对其做了一些优化,在集成之后就可以通过浏览器和客户端进行实时互动了 。
1 背景介绍
Janus网关的集成与优化

文章插图
 
背景介绍主要从三个方面来进行切入,分别是:业务场景、自研RTC体系以及为何要做集成 。
1.1 业务场景
Janus网关的集成与优化

文章插图
 
我们所做的业务是一个多人在线实时互动的教育场景,基本需求是老师和学生之间能够进行音视频实时互动 。除了音视频之外,还需要有一些其他的辅助教学内容,也需要进行实时的交互,比如老师和学生的手写笔迹、PPT课件、控制的状态(课件翻页)等 。为了满足这些功能,从技术上分解来看,首先需要支持多对多的音视频连麦,其次是课件、手写笔迹的实时同步 。
1.2 自研RTC体系
Janus网关的集成与优化

文章插图
 
为了实现这些功能,在袁荣喜老哥的带领下, 我们开发了自己的RTC系统 。自研RTC系统主要包含服务端和客户端两大块,它们都是通过自研实现的(语音处理借助了WebRTC的APM模块) 。客户端和服务器之间使用UDP协议来进行媒体通信, 数据包采用的是私有格式, 在此基础之上完成传输的控制, 比如数据包排序重组, FEC, 丢包重传, 主动Get以及拥塞控制等. 整个体系以客户端的形式提供给用户,支持windows、Android/ target=_blank class=infotextkey>安卓、mac、IOS这几个主流平台,在使用之前需要下载客户端 。
1.3 为何要做集成
我们主要是从用户接入的易用性来考虑的. 首先是我们的客户端需要用户自己去下载,安装成本是比较高,然后才是注册账号、登录这些步骤 。而WebRTC可以在浏览器上运行,而大部分用户对于浏览器是非常熟悉的. 其次, WebRTC的功能通过JS API进行调用,天然跨平台, 不需要过多的考虑设备兼容性这些问题, 它们都封装在WebRTC内部了 。
通过集成,用户可以通过浏览器来接入我们的产品,对于没有使用过我们产品的用户来说, 它提供了一种更加便捷的方式 。
Janus网关的集成与优化

文章插图
 
上图是完成集成后的一个效果,左图是浏览器,登录的是学生端 。右图的窗口是我们PC上的客户端,登录的是老师 。老师和学生可以进行实时的视频互动,同时还可以通过PPT课件和手写笔迹来辅助课堂教学 。
2 WebRTC与Janus网关
Janus网关的集成与优化

文章插图
 
WebRTC与Janus网关部分包含三个小节:首先是P2P传输通道的建立,介绍WebRTC的媒体传输是如何建立起来的,其次是介绍WebRTC网关以及Janus网关 。
2.1 P2P传输通道的建立
P2P是指通信的内容可以不经过服务器, 直接发送给对方,省去了中间服务器的开销 。WebRTC的P2P传输底层采用的是UDP协议,从传输特性上说,它是无连接、不可靠的协议 。当然,WebRTC在进行传输时会有比如包确认、包重传等措施来弥补这些问题 。
图中下方是两台需要进行音视频互动的电脑,电脑中的五色圆圈图案是WebRTC的logo,表示这个电脑上运行的WebRTC的客户端,这种客户端最常见的就是浏览器了 。实际上只要实现WebRTC的模块功能,它们都可以进行音视频的会话,比如WebRTC网关就实现了WebRTC模块的功能,这里认为这两台电脑上运行了支持WebRTC的浏览器就可以了 。这两个浏览器要进行音视频互动至少需要两方面的信息:一是双方采用怎样的音视频编解码以及相应的编解码参数,比如采样率、分辨率、帧率等参数 。二是使用UDP发送数据需要知道对方UDP的地址信息,主要包括IP地址和端口 。要交换获取这两方面的信息的话, 需要借助到一个位于外网的服务器,我们称之为信令服务器 。
Janus网关的集成与优化

文章插图
 
接下来我们来分析一下连接建立的过程. 首先,左边浏览器发起一个SDP offer的请求,在SDP中携带了它支持的音视频编解码和ICE参数 。这里引入了两个概念:SDP和ICE 。SDP(Session Description Protocol)是会话描述协议,这里只需知道它封装了协商的参数就可以了 。ICE(Interactive Connectivity Establishment)是互动连接建立,它负责UDP下媒体会话的建立. 在ICE参数里包含了UDP的地址信息(访问外网的NAT地址需要借助STUN服务, 为了简单起见, 可以先不考虑)以及建立ICE连接所需要的用户名跟密码 。


推荐阅读