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博客