如何将 FEC 功能用于 Opus 编解码器

sto*_*art 6 audio opus

我正在尝试使用 opus 前向纠错 (FEC) 功能。我有一个服务,它使用 OPUS_SET_INBAND_FEC(1) 和 OPUS_SET_PACKET_LOSS_PERC(20) 进行编码,并使用 10ms 数据包并通过 UDP 发送它们。

虽然我不清楚解码过程。

  1. 当一个数据包丢失时,我是否只需要使用 fec=1 调用 decode 或者我是否需要在下一个数据包之后调用 fec=0 的 decode ?
  2. 我如何预先知道我在启用 fec 的情况下发送以解码的 pcm 的大小?

sto*_*art 7

我设法让它工作。

问题中所述的编码部分是正确的:

  • 使用编码器 OPUS_SET_INBAND_FEC(1) 和 OPUS_SET_PACKET_LOSS_PERC(X) 其中 x>0 ans x<100
  • 发送持续时间至少为 10 毫秒的数据包(例如:48 kHz 下的 480 个样本)

对于解码部分,当一个数据包丢失时,首先使用 fec=1调用下一个数据包的解码功能,然后再次使用 fec=0

当使用 fec=1 调用 decode 时,发送的 pcm 将被完全填满。如果您不知道解码器上应该使用pcm 的长度OPUS_GET_LAST_PACKET_DURATION(x)其中 x 将获得最后一个数据包的持续时间。

  • @nh2,这是我在弄清楚如何配置 FEC 之后写的文章。所以是的,这可能会有所帮助!:) (2认同)