IP网络视频丢包误码恢复技术

IP网络视频传输的丢包和误码会造成马赛克、花瓶等视频质量下降的问题,保障和恢复视频质量的技术在此总结一下。

 

1.重传,NACK

    重传机制,即在发现丢包的情况下发送端重新发送丢失的包, NACK,需要借助视频缓冲 (video jitter buffer),以及RTCP协议, RFC 5104 定义了 RTCP 协议如何承载此控制流程,客户端需要在sdp里添加  a=rtcp-fb: * nack,以告知对端其支持 NACK,如果客户端支持此特性,通常在客户端缓冲一段视频包,当收到对端反馈的丢包序列号后在本地查找,如果缓冲区内存在,则发送给对端,对端接收到以后放到本地缓冲区,重排,播放。

    作为实践,WebRTC底层引擎实现了NACK.可以参考其代码实现。

 

 

2.前向纠错,Forward Error Correction (FEC)

    前向纠错简称FEC(Forward Error Correction),其原理是:发送方将要发送的数据附加上一定的冗余纠错码一并发送,接收方则根据纠错码对数据进行差错检测,如发现差错,由接收方进行纠正,特点:使用纠错码(纠错码编码效率低且设备复杂)、单向信道、发送方无需设置缓冲器。

FEC机制用于处理丢包率低于 10%情况,同时也可以用于关键帧的保护,与此相关的RFC RFC 5109

 

 

3.动态码率控制

    动态码率控制的原理是:客户端通过协议(RTCP)反馈自己的丢包情况,当丢包大于 10%时,编码器降低码率,减少带宽占用,但同时也降低了视频质量。与此相关的RFC RFC 6035,RFC 36611

 

 

4.H264 SVC

    H.264 SVC,即scalable video coding,是以H.264为基础,在语法和工具集上进行了扩展,支持具有分级特性的码流。编码器产生的码流包含一个或多个可以单独解码的子码流,子码流可以具有不同的码率,帧率和空间分辨率。分级的类型:

@时域可分级(Temporal scalability):可以从码流中提出具有不同帧频的码流。

@空间可分级(Spatial scalability):可以从码流中提出具有不同图像尺寸的码流。

@质量可分级(Quality scalability):可以从码流中提出具有不同图像质量的码流。

 

采用H264 SVC编码,服务器可以根据不同的网络情况丢弃质量层,保证视频的流畅。

H264 SVC编码器的开源实现:https://gitorious.org/ffmpeg-kraken/

 

 

本文参考了博客:http://blog.csdn.net/voipmaker/article/category/1374136

 

你可能感兴趣的