Opus FEC小結

  前向糾錯也叫前向糾錯碼(Forward Error Correction,簡稱FEC),是增加數據通訊可信度的方法。在單向通訊信道中,一旦錯誤被發現,其接收器將無權再請求傳輸。FEC 是利用數據進行傳輸冗餘信息的方法,當傳輸中出現錯誤,將允許接收器再建數據。


  FEC通過冗餘編碼的方式將當前幀數據冗餘一些到後一幀數據,因此當發現當前幀丟失,可以通過後一幀數據恢復。

int opus_decode ( OpusDecoder st, const unsigned char data, opus_int32 len, 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);


因此可以通過預先緩存一幀數據的方式進行解碼,每次收到一幀數據後,解碼前一幀,此時需要考慮上述三種情況決定放入何種數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章