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

我不清楚解码过程。

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

    我设法使它起作用。

    问题中说明的编码部分是正确的:

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

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

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

    09-25 10:06