版权声明:本文为博主原创文章,未经博主允许不得转载。 http://blog.csdn.net/xy_kok/article/details/73649776
前向纠错也叫前向纠错码(Forward Error Correction,简称FEC),是增加数据通讯可信度的方法。在单向通讯信道中,一旦错误被发现,其接收器将无权再请求传输。FEC 是利用数据进行传输冗余信息的方法,当传输中出现错误,将允许接收器再建数据。
FEC通过冗余编码的方式将当前帧数据冗余一些到后一帧数据,因此当发现当前帧丢失,可以通过后一帧数据恢复。
int opus_decode ( OpusDecoder∗ st, const unsigned char∗ data, opus_int32len, opus_int16 ∗ pcm, int frame_size,int decode_fec )
opus_decode可以通过放空包或者打开的FEC的情况下尝试恢复数据。
当data为NULL时,len应该为0, 此时opus尝试解一帧pcm数据,猜出这一帧数据;
当decode_fec为1时,使用FEC机制,尝试恢复前一帧数据;否则编码当前帧;
罗列以下三种情况并例举伪代码:
1. 前一帧与当前帧均正常, 前一帧数据正常解码;
opus_decode(decoder, previous_frame, frame_size, pcm, pcm_size, 0);
2. 前一帧丢失,当前帧正常,可以通过打开FEC的方式解码当前帧,尝试恢复前一帧;
opus_decode(decoder, current_frame, frame_size, pcm, pcm_size, 1);
3. 前一帧与当前帧均丢失,通过放空包的方式,尝试猜出前一帧数据;
opus_decoder(decoder, NULL, 0, pcm, pcm_size, 0);
因此可以通过预先缓存一帧数据的方式进行解码,每次收到一帧数据后,解码前一帧,此时需要考虑上述三种情况决定放入何种数据。