环信即时通讯平台提供了基于互联网和移动终端的实时语音、实时视频等通讯能力。环信将移动即时通讯能力通过API和客户端SDK包的方式提供给企业,帮助企业在自己的产品中便捷、快速的实现通讯和社交功能。
2.1 基础功能
2.1.1 视频能力
环信支持基于IP网络的点对点实时语音和视频。通过多种技术包括自动增益控制、回声消除、抖动控制、丢包策略、动态带宽自适应等增强算法,保证高质量实时语音和视频体验。
对于主流的多版本安卓手机平台和iOS手机平台,环信SDK都做了适配和优化,保障音视频在主流平台上的流畅性和实时性,可以根据手机硬件和网络带宽情况智能调整语音带宽,并使用先进的丢包算法适应低带宽需求。语音的编解码中加入了降噪算法,并通过语音活跃检测来大大减少通话静默期的数据流量,实测的实时语音每分钟流量低于200K。视频处理则采用多线程实现,在低端CPU的手机上也能确保实时采集编码、实时传输和实时解码,保障视频在主流平台上的流畅性和实时性。通过优化的码率控制算法,能根据具体网络环境选择最优的视频码率和帧率。
图2-1. 实时音视频通话
环信支持的实时音频特性:
基于IP网络的点对点实时语音。在P2P无法连接时,通过服务器转发进行连接。
音频编码采用OPUS,双向语音流量低至170k bytes/min。
背景噪音及回音消除技术,还原清晰语音。
动态语音检测。
自动增益控制,防止声音忽大忽小。
自适应抖动控制算法以及语音包丢失隐藏算法提高音频服务质量。
环信支持的实时视频特性:
基于IP网络的点对点实时视频。在P2P打不通时,通过服务器转发数据。
视频编码采用H.264,双向流量2.5~3M bytes/min。
后续版本支持VP8。
动态带宽调整,先进丢包恢复算法,适应低带宽需求。
通过设置视频缓冲buffer和丢包重传机制来提高视频服务质量。
实时多线程编解码,极速视频不卡顿。
先进的QoS算法,即使弱网络下,依旧保证视频质量。
2.1.2 抗丢包能力
纯IP音视频的传输很难避免丢包情况的发生,丢包的原因有很多,比如WiFi或移动网络的无线信道干扰、高峰时期路由器拥塞、移动设备性能不足等。当一个媒体数据包在网络上传输的时间过长,在需要播放时不能及时到达,即使收到也被认为丢包了。环信实时音视频针对以上问题进行了优化,使用了丢包检测、重传、FEC纠错和PLC丢包掩藏技术。
2.1.2.1 丢包检测
每个数据包都带有一个序号,序号是递增的,接收端检查接收到的包序号是否连续来判断是否丢包。
2.1.2.2 重传
当接收方检测到丢包时,发送nack包去请求重传指定的一个或多个包。
2.1.2.3 FEC纠错
在媒体数据包的基础上,再发送冗余FEC纠错包,在丢包率不是很高的情况下,接收方可以恢复被丢弃的媒体数据包。
2.1.2.4 PLC丢包掩藏
利用人耳的隐蔽特性,在接收端所收到语音信息中,选取一段或几段按照一定的逻辑仿照出已经丢失了的语音包。主要有静音或噪声置换法、插值法等。
2.1.3 抗抖动能力
抖动用来表示数据包延迟的变化程度,即发送包间隔和接收包间隔的差值的变化量,见图中绿色长度减去蓝色长度。抖动使得媒体数据接收间隔不均匀,播放的画面或声音颤抖;如果视频和音频的抖动不一致,会造成同步的丢失。抗抖动一般是设置抖动缓冲区,减小甚至消除抖动的影响,但引入了额外的延迟。为了最小化延迟,环信采用了自适应抖动缓冲技术,在通话过程中动态检测网络抖动情况。当抖动变大时,增加缓冲区的长度;当抖动变小时减少缓冲区的长度。自适应抖动缓冲技术兼顾了抗抖动和低延迟,在实际环境中有非常好的效果。
2.1.4 自适应带宽估计
网络的状态是动态变化的,带宽、丢包、延时和抖动指标是不断波动的。为最大化利用网络的带宽,保障视频和语音的流畅播放,环信在通话过程中对网络状态进行了自动实时检测和估计,根据估计出来的参数指标来调整发送端编解码参数。为确保带宽估计的准确性和实时性,使用了双端估计:在发送端根据数据包和探测包的RTT变化来估计;在接收端使用抖动和丢包参数作为自适应滤波器的输入,动态估计网络带宽并反馈给发送端。发送端根据网络状态动态调整视频码率、分辨率和帧率:当网络情况良好带宽充足时,使用高码率高分辨率高帧率,视频和语音清晰流畅;当网络不好带宽变小时,降低码率和分辨率,在一定程度内牺牲清晰度、保障流畅度;当网络进一步恶化时可以再适当降低帧率;当网络再进一步恶化时停止发送视频保障语音的传输。
2.1.5 P2P传输
P2P就是点对点,通话双方直接互相发送媒体数据,不经过服务器的转发。P2P技术是必不可少的音视频技术,它大大降低了服务器的负载和减少了端到端的延迟。P2P使用了NAT穿越技术(俗称P2P打洞)。通常通话双方都是在不同局域网里,不能直接发送数据,需要服务器的协助才能实现P2P。
2.1.6 语音自动增益AGC
由于讲话者个体、环境、设备麦克风的不同,比如有人声音大,有人声音小,有人喜欢靠近话筒说话,有喜欢离话筒远一些,加上不同设备麦克风之间的差异,不加处理会导致收听者感觉对方语音音量忽大忽小,听觉上会非常不舒服。
AGC可以针对上述这些情况自动给与“增益补偿”。简单的说,当讲话者的声音太大的时候,AGC会自动降低增益,从而使语音维持在一个恒定的音量上;反之,讲话者的声音太小,AGC会自动提高增益,以确保系统仍然维持在恒定的音量。在音频系统中,AGC可以根据“要求”对声音信号自动给与“增益补偿”。
2.1.7 声学回声消除
回声通常出现在通话中一方打开了扬声器外放,扬声器播放的声音会被麦克风采集并发送给对方,这样对方就会听到了自己的声音(即回声)。如果不对回声进行处理,将会影响通话质量和用户体验,更严重的还会形成震荡,产生啸叫。
回声消除就是从麦克风采集的声音数据中,消除掉扬声器的声音,只保留本地通话者的声音。回声消除的难点在于快速收敛到稳定状态和根据环境动态调整回声估计参数。环信SDK配备了自适应回声消除算法,准确估计回声并能自适应调整参数,跟踪通话环境变化,达到很好的回声消除效果。另外在一些手机机型会配备硬件回声消除器件,SDK也会使用硬件回声消除,达到降低CPU占用和降低功耗的目的。
2.1.8 噪声抑制
在实际使用环境中麦克风采集的语音通常会有一定强度的背景音,这些背景音一般是背景噪音,当背景噪音强度较大时,会对干扰语音的听觉效果,严重是完全无法听清正常的语音。噪音抑制的关键是提取出噪声的频谱,然后将含噪语音根据噪声的频谱做一个反向的补偿运算,从而得到降噪后的语音。环信SDK包含有先进的降噪算法,对输入的每帧频谱进行分析,提取多个语音和噪声特征,合并到一个模型中形成一个多特征的概率密度函数,精确的估计出噪声,并把他们从采集数据消除掉。在大部分实际使用环境中,都能有效的抑制噪声,还原干净的语音。
2.2 多平台SDK
2.2.1 移动端SDK
移动端SDK提供清晰简明的接口,用户可以使用某一具体模块实现特定的功能。
SDK提供完善的连接管理、音视频通道管理,方便用户在移动端实现稳定成熟的音视频功能,同时提供了更好的扩展性,支持更多的对接和设备同步场景。
2.2.2 Web SDK
Web SDK的设计是为了方便使用Web方式的应用开发者, 支持在不同浏览器环境下的实时音视频场景。SDK的设计原则是接口简洁易用、保持开发框架的中立性。
目前版本的SDK能力如下:
SDK支持IE9+、FireFox10+、Chrome54+、Safari6+之间音视频建立。
支持Web端之间,Web端与Android端/iOS端相互实时音视频功能。
支持iOS、Android SDK之间实时音视频功能。
2.3 服务端REST接口
环信开放平台与APP服务端的REST接口,可实现实时音视频创建、关闭等功能。
REST(Representational State Transfer)是一种轻量级的Web Service架构风格,可以翻译成“表述性状态转移”,实现和操作明显比 SOAP和XML-RPC更为简洁,可以完全通过HTTP协议实现,还可以利用缓存Cache来提高响应速度,无论性能、效率和易用性上都优于 SOAP协议。
REST架构遵循了了CRUD原则,CRUD原则对于资源只需要四种行为:Create(创建)、Read(读取)、Update(更新)和Delete(删除)就可以完成对其操作和处理。这四个操作是原子操作,对资源的操作包括获取、创建、修改和删除资源的操作正好对应HTTP 协议提供的GET、POST、PUT和DELETE方法。这种针对网络应用的设计和开发方式,可以有效降低开发的复杂性,提高系统的可伸缩性。
环信的 Rest 服务完全是基于 HTTPS 的安全协议,并符合OAuth 2.0 标准和RBAC(基于角色的访问控制)的权限模型实现。REST接口模块的架构基于Spring boot构建分布式Web服务,配合负载均衡,实现高可用和快速伸缩;并通过后端异步处理单元,进一步提高消息处理吞吐量。同时,REST接口的特性保证了编程语言的无关性,APP服务端可使用任意编程语言实现。
网友评论