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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值