召开远程视频会议,可大大提升工做效率,节省与会人员的工做时间和会议费用。视频会议通话系统应用在政府、军队、教育、金融、交通、能源、医疗等行业及跨国、跨地区的企业中逐步普及。算法
EasyRTC视频通话系统(如下简称EasyRTC)是一款覆盖全球的实时音视频通话与会议软件,结合了智能视频、智能语音、窄带传输、通道加密、数据加密等技术,可经过微信小程序、H5页面、APP、PC客户端等接入方式之间互通,快速从零开始搭建实时音视频通讯,支持一对1、一对多等视频通话,知足语音视频社交、在线教育和培训、视频会议和远程医疗等场景;支持多终端接入方式之间互通,快速从零开始搭建实时音视频通讯平台。小程序
EasyRTC视频通话系统具备实时音视频通话,支持视频会议(单路、多路)、会议录像、会议回放、旁路直播等技术特色。(演示地址:https://demo.easyrtc.cn)微信小程序
今天经过从语音通话和视频通话两个方面全面解读视频会议系统的功能架构。微信
在视频会议中,网络语音通话一般多对多的的,但就模型层面来讲,咱们讨论一个方向的通道就能够了。一方说话,另外一方则听到声音。看似简单而迅捷,可是其背后的流程倒是至关复杂的。咱们将其通过的各个主要环节简化成下图所示的概念模型:网络
这是一个最基础的模型,由五个重要的环节构成:采集、编码、传送、解码、播放。架构
语音采集指的是从麦克风采集音频数据,即声音样本转换成数字信号。其涉及到几个重要的参数:采样频率、采样位数、声道数。工具
假设咱们将采集到的音频帧不通过编码,而直接发送,那么咱们能够计算其所须要的带宽要求,仍以上例:320*100 =32KBytes/s,若是换算为bits/s,则为256kb/s。这是个很大的带宽占用。而经过网络流量监控工具,咱们能够发现采用相似QQ等IM软件进行语音通话时,流量为3-5KB/s,这比原始流量小了一个数量级。而这主要得益于音频编码技术。 因此,在实际的语音通话应用中,编码这个环节是不可缺乏的。目前有不少经常使用的语音编码技术,像G.72九、iLBC、AAC、SPEEX等等。优化
当一个音频帧完成编码后,便可经过网络发送给通话的对方。对于语音对话这样Realtime应用,低延迟和平稳是很是重要的,这就要求咱们的网络传送很是顺畅。编码
当对方接收到编码帧后,会对其进行解码,以恢复成为可供声卡直接播放的数据。 完成解码后,便可将获得的音频帧提交给声卡进行播放。加密
若是仅仅依靠上述的技术就能实现一个效果良好的应用于广域网上的语音对话系统,那就太easy了。正是因为不少现实的因素为上述的概念模型引入了众多挑战,使得网络语音系统的实现不是那么简单,其涉及到不少专业技术。一个“效果良好”的语音对话系统应该达到以下几点:低延迟,背景噪音小,声音流畅、没有卡、停顿的感受,没有回音。
对于低延迟,只有在低延迟的状况下,才能让通话的双方有很强的Realtime的感受。固然,这个主要取决于网络的速度和通话双方的物理位置的距离,就单纯软件的角度,优化的可能性很小。
(1)回音消除
如今你们几乎都已经都习惯了在语音聊天时,直接用PC、手机的声音外放功能。当使用外放功能时,扬声器播放的声音会被麦克风再次采集,传回给对方,这样对方就听到了本身的回音。
回音消除的原理简单地来讲就是,回音消除模块依据刚播放的音频帧,在采集的音频帧中作一些相似抵消的运算,从而将回声从采集帧中清除掉。这个过程是至关复杂的,由于它还与你聊天时所处的房间的大小、以及你在房间中的位置有关,由于这些信息决定了声波反射的时长。智能的回音消除模块,能动态调整内部参数,以最佳适应当前的环境。
(2)噪声抑制
噪声抑制又称为降噪处理,是根据语音数据的特色,将属于背景噪音的部分识别出来,并从音频帧中过滤掉。
(3)抖动缓冲区
抖动缓冲区(JitterBuffer)用于解决网络抖动的问题。所谓网络抖动,就是网络延迟一会大一会小,在这种状况下,即便发送方是定时发送数据包的(好比每100ms发送一个包),而接收方的接收就没法一样定时了,有时一个周期内一个包都接收不到,有时一个周期内接收到好几个包。如此,致使接收方听到的声音就是一卡一卡的。
JitterBuffer工做于解码器以后,语音播放以前的环节。即语音解码完成后,将解码帧放入JitterBuffer,声卡的播放回调到来时,从JitterBuffer中取出最老的一帧进行播放。
JitterBuffer的缓冲深度取决于网络抖动的程度,网络抖动越大,缓冲深度越大,播放音频的延迟就越大。因此,JitterBuffer是利用了较高的延迟来换取声音的流畅播放的,由于相比声音一卡一卡来讲,稍大一点的延迟但更流畅的效果,其主观体验要更好。
固然,JitterBuffer的缓冲深度不是一直不变的,而是根据网络抖动程度的变化而动态调整的。当网络恢复到很是平稳通畅时,缓冲深度会很是小,这样由于JitterBuffer而增长的播放延迟就能够忽略不计了。
(4)混音
在视频会议中,多人同时发言时,咱们须要同时播放来自于多我的的语音数据,而声卡播放的缓冲区只有一个,因此,须要将多路语音混合成一路,这就是混音算法要作的事情。
视频通话的概念模型与语音彻底一致:
摄像头采集指的是从捕捉摄像头采集到的每一帧视频图像。
通常而言,一个摄像头能够支持多种不一样的采集分辨率和采集帧频,而不一样的摄像头支持的分辨率的集合不同。好比如今有不少高清摄像头能够支持30fps的1920*1080的图像采集。
编码用于压缩视频图像,同时也决定了图像的清晰度。视频编码经常使用的技术是H.26四、H.26五、MPEG-四、XVID等。
当对方接收到编码的视频帧后,会对其进行解码,以恢复成一帧图像,而后在UI的界面上绘制出来。
相比于语音,视频的相关处理要简单一些。
(1)动态调整视频的清晰度
在Internet上,网络速度是实时动态变化的,因此,在视频会议中,为了优先保证语音的通话质量,须要实时调整视频的相关参数,其最主要的就是调整编码的清晰度,由于清晰度越高,对带宽要求越高,反之亦然。
好比,当检测网络繁忙时,就自动下降编码的清晰度,以下降对带宽的占用。
(2)自动丢弃视频帧
一样网络繁忙时,还有一个方法,就是发送方是主动丢弃要发送的视频帧,这样在接收方看来,就是帧频fps下降了。