Opus编解码器如何使用FEC功能

8

我正在尝试使用opus前向纠错(FEC)功能。

我有一个服务,使用OPUS_SET_INBAND_FEC(1)和OPUS_SET_PACKET_LOSS_PERC(20)对10毫秒数据包进行编码,并通过UDP发送它们。

但是,我不清楚解码过程。

  1. 当数据包丢失时,我需要仅使用fec = 1调用解码器,还是需要在下一个数据包上再次使用fec = 0调用解码器?
  2. 我如何预先知道启用fec的pcm大小以发送到解码器?
1个回答

9
我成功使其工作了。
在问题中提到的编码部分是正确的:
- 使用编码器OPUS_SET_INBAND_FEC(1)和OPUS_SET_PACKET_LOSS_PERC(X),其中x>0且x<100 - 发送至少10ms(例如:48kHz的480个样本)的持续时间的数据包
对于解码部分,当一个数据包丢失时,首先使用fec=1调用下一个数据包的解码函数,然后再使用fec=0调用。
使用fec=1调用解码函数时,发送的pcm将被完全填充。如果您不知道pcm应该是多长,请在解码器上使用OPUS_GET_LAST_PACKET_DURATION(x),其中x将获取最后一个数据包的持续时间。

我正在尝试弄清楚如何使用inband fec。您能否提供解码器部分的示例? - fsquirrel
1
@fsquirrel 或许这个链接有帮助?https://ddanilov.me/how-to-enable-in-band-fec-for-opus-codec/ - nh2
2
@nh2,这是我在弄清如何配置FEC后写的帖子。所以,它可能会有所帮助! :) - fsquirrel
1
@fsquirrel 哈哈,不错! - nh2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接