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

时间:2018-03-22 11:32:07

标签: audio opus

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

我现在还不清楚解码过程。

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

1 个答案:

答案 0 :(得分:2)

我设法让它发挥作用。

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

  • 使用编码器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将获得最后一个数据包的持续时间。