Opus前向纠错

官网:https://opus-codec.org/

Github:https://github.com/xiph/opus

一、简介

Opus 可以处理广泛的音频应用,包括 IP 语音、视频会议、游戏内聊天,甚至远程现场音乐表演。它可以从低比特率的窄带语音扩展到非常高质量的立体声音乐。支持的功能有:

  • 比特率从 6 kb/s 到 510 kb/s
  • 采样率从 8 kHz(窄带)到 48 kHz(全带)
  • 帧大小从 2.5 ms 到 60 ms
  • 支持恒定比特率 (CBR) 和可变比特率 (VBR)
  • 从窄带到全带的音频带宽
  • 支持语音和音乐
  • 支持单声道和立体声
  • 支持多达 255 个通道(多流帧)
  • 动态可调比特率、音频带宽和帧大小
  • 良好的丢包鲁棒性和丢包隐藏 (PLC)
  • 浮点和定点实现

二、编码

opus_encoder_ctl(enc, OPUS_SET_INBAND_FEC(1));

opus_encoder_ctl(enc, OPUS_SET_PACKET_LOSS_PERC(20));

创建完成opus编码器后,调用该接口就能启动opus前向纠错的功能了,编码数据自带冗余包。

三、解码

int opus_decode ( OpusDecoder ∗ st, const unsigned char ∗ data, opus_int32 len, opus_int16 ∗ pcm, int frame_size, int decode_fec )

opus解码器可以通过放空包或者打开的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);

参考:

webrtc音频QOS方法二(opus编码器自适应网络参数调整功能)丶Java教程网-IT开发者们的技术天堂
Opus FEC小结_xy_kok的博客-CSDN博客
 

你可能感兴趣的:(流媒体开发之路,webrtc)