基于WebRTC的音视频实时教学系统建设探究
2020-08-31赵永明
赵永明
(中国气象局气象干部培训学院,北京 100081)
1 WebRTC技术
1.1 WebRTC架构
WebRTC主要包括音频引擎、视频引擎和网络传输协议3个主要部分。音频模块包括iSAC/iLBC采集编解码、声音处理、语音控制、同步及输出,采用降噪和回音处理技术提供高质量的语音。视频引擎模块包含视频采集、编解码、加密、图像处理显示、网络传输与流媒体控制等技术,视频采用VP8编解码技术具有低延时的特点,视频抖动缓冲以及图像增强可以减小网络不稳定时的视频噪音,增强视频质量。网络传输包含了稳定的SRTP,包含STUN、ICE等技术,支持透防火墙等功能,各部分可根据实际需求进行扩展,可满足网络条件较差的用户进行实时的音视频交流。
图1 webrtc架构图
WebRTC采用SIP-over-WebSocket(SIPoWS)作为信令栈。HTTP协议用于浏览器下载HTML5/JavaScript程序内容;NAT栈解决P2P连接问题;媒体栈用于发送和接收RTC的音频和视频。
1.2 WebRTC优缺点
WebRTC视频教学会议方案优势主要体现基于UDP,延时低,互动效果好;支持跨平台,容易集成二次开发,用h5网页就能调用开发,目前android,Ios,pc的web都能调用;采用视频协议新标准,WebRTC的兼容性越来越好。较传统的基于H.323视频会议系统,WebRTC主要采用SIP的协议作为信令传输协议,具有扩展性强,稳定可靠、带宽利用率高等特点,利用WebRTC技术,用户之间可以直接利用基于HTML5技术的浏览器进行多媒体通信,大大提高了用户之间通信的便捷性。
WebRTC目前存在的问题包括开发难度较高,特别是服务端没有统一的方案;UDP穿透,部署NAT后端服务器,比较麻烦;WebRTC架构方案较多,选型有一些难度。
2 音视频实时教学系统的设计
2.1 架构设计
系统采用B/S架构模型,后台配置SIP服务器,WebSocket代理服务器、媒体服务器,WebRTC客户端运行在浏览器,采用JavaScript语言调用SIP协议栈用于发送接收解析SIP信令。SIP服务器主要进行用户认证,会话控制。WebSocket代理服务器通过侦听负责连接WebRTC客户端和SIP服务器。媒体服务器负责音视频信号的混合,并通过SIP服务器提供的会议信息对音视频信号进行分发。
图2 音视频实时教学系统结构
2.2 系统实现
SIP服务器主要控制会议的建立,学员和老师的加入和退出,为了避免冗余,以及做到与现有技术的最大兼容,信令方法和协议都不由WebRTC标准来指定,协调通信的过程。WebRTC应用要发起一个对话交换媒体元数据、网络数据密钥数据等,本文采用了在Asterisk开源软件的基础上进行修改实现。另外还考虑Freeswitch作为服务端,包含了sip服务器,stun服务器、视频转发服务器。p2p的通信过程采用SPD的会话描述协议以及通过STUN技术穿越NAT实现p2p的直接通信或者使用STUN服务器实现突破NAT的P2P通信,在连接建立前或者建立后调用peerConnection.addStream方法将本地视频/音频数据流加入到connection当中,当对方接受到视频流时会触发addStream事件,在其处理程序中我们可以接受数据流将其显示,STUN服务器可以是自己搭建的,也可以是直接使用现成的。
媒体服务器主要完成音视频的混合和分发,音频部分采用Zaptel实现,视频部分采用FFmpeg实现,可判断客户端是否在同一网段,还可以采用组播方式传输媒体流来节省带宽。流媒体服务自主研发服务端技术,门槛较高,基于WebRTC开源MCU框架有licode、kurento、jistsi等,可选择基于开源改造节省开发时间,本文采用Licode进行了学习和实践。Licode主要由Erizo的一对多组件(MCU)、NodeJsapi、负责管理视频会议session的控制器、负责管理会议房间、参加人员、凭证等服务器资源的管理单元4个模块组成。在ubuntu环境下进行了搭建,安装时需要依赖libNice、libavutil、libevent-core等库。通过下载licode,编译安装后配置liconde_config.js及erizoController.js文件后即可实现多人视频通信。
WebRTC客户端通过浏览器Html5应用采用WebRTC的音频引擎和视频引擎及网络传输部分的javascriptAPI实现音视频采集和编解码以及音视频同步、传输以及图像同步。传统的视频会议一般需要安装第三方插件或者采用flash插件将语音和视频迁入到网页中,html5的video和audio标签可不使用特殊插件播放音视频,因此采用web浏览器接入视频教学系统成为了新的选择。本文采用JsSIP兼容WebRTC的js库,可快速实现客户端,通过WebRTC,从用户摄像头获取图像并传给服务器。由于WebRTC只在Chrome、Opera、Firefox上支持,所以客户端不能运行于IE浏览器。JsSIP是一个javascript库,通过websocket传输SIP,具有丰富的API,适用于Asterisk,可提供全功能的sip断点,JsSIP封装了SIP和WebRTC,如果不需要自己调用getUserMedia来获取音视频,JsSIP会通过JsSIP.UA.call方法的参数来实现调用,通过配置对象初始化JsSIP用户代理,调用相应的api可以很容易实现网站间通过音视频实时通信。
通过本文实践,基本熟悉和掌握了基于WebRTC进行音视频教学系统开发的基本思路和技术路线,目前完成的系统实现了音视频实时教学的基本功能。
2.3 前端功能实现
完成的客户端前端主要包括用户注册登录,主讲人加入会议进行音视频推流,学员端用户加入会议参会,举手申请连麦,以及文字聊天等直播系统的主要功能,基本实现了通过网络进行视频直播教学活动,后期将进一步考虑基于P2P的WebRTC架构调整、使用P2P媒体流,音频、视频和数据的连接直接通过浏览器实现、采用STUN协议建立一个P2PRTC媒体等方式,改进多人参加互动连麦,进一步改进会议房间管理和用户管理、添加签到点名、课堂调查、抽奖以及点赞等功能,同时提升系统的易用性。
3 结束语
本文分析了基于WebRTC开发视频会议系统的基本设计思路和开发模式,主要部分基于开源软件实现,对现有业务使用的视频会议产品提出优化改造需求和设计开发思路提供了参考,后期将在此基础上扩展音视频教学系统功能、优化系统性能、增加学员在线学习体验和提升同步课堂教学效果,为利用同步音视频教学在气象远程培训业务应用提供更好的支持。