前言
WebRTC是Web Real-Time Communication(基于网页的实时通信)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的技术,是谷歌2010年以6820万美元收购Global IP Solutions公司而获得的一项技术。2011年5月开放了工程的源代码,在行业内得到了广泛的支持和应用,成为下一代视频通话的标准【1】。
为实时语音/视频通话应用提供良好的用户体验并不是件容易的事情,其难点在于:
1. 通话双方所处的网络环境是不断变化的,通信框架需要准确而实时的估计出当前网络状况下可用的带宽,对编解码器的最终输出的码率进行调整,避免网络拥塞。
2. 音视频数据在网络传输的过程中会有丢包,造成接收方无法解码出原始的音视频数据,会使用户感到画面有很明显的卡顿或者看到有马赛克或者花屏的图像。
为了解决上述这些难题,WebRTC中包含了一整套完善的实时码率自适应技术和抗丢包技术。对于实时的码率自适应技术,在weizhenwei大神的文章《WebRTC基于GCC的拥塞控制》中有着详细的介绍。而对于抗丢包技术,目前看来网络上进行完整分析的文章不多。希望在接下来的几篇文章中,能为大家一一介绍清楚。
在WebRTC中,使用的抗丢包技术主要有如下几种:
1. NACK(Negative ACKnowledge),即RTP包重传技术。接收端利用RTCP包通知发送端哪些RTP包没有接收到,需要发送端重新发送这些RTP包。
2. FEC(Forward Error Correction),即前向纠错技术。在发送含有音视频数据RTP包的同时发送一些保护包,当某些含有音视频的RTP数据包丢失时,利用保护包进行XOR(异或)操作恢复出原始的音视频RTP包。
3. 编解码器层面上的处理(如每隔一段时间发送IDR帧、使用分层的编码技术等)。
参考文献
1. 百度百科:WebRTC。