如何使用 Opus 编解码器的 FEC 功能
How to use FEC feature for Opus codec
我正在尝试使用 opus 前向纠错 (FEC) 功能。
我有一项使用 OPUS_SET_INBAND_FEC(1) 进行编码的服务
OPUS_SET_PACKET_LOSS_PERC(20) 使用 10ms 数据包并通过 UDP 发送它们。
虽然我不清楚解码过程。
- 当一个数据包丢失时,我是否只需要使用 fec=1 调用解码,或者我是否需要在下一个数据包之后也使用 fec=0 调用解码?
- 我如何预先知道我发送以在启用 fec 的情况下进行解码的 pcm 的大小?
我成功了。
题中编码部分正确:
- 使用编码器 OPUS_SET_INBAND_FEC(1) 和 OPUS_SET_PACKET_LOSS_PERC(X) 其中 x>0 和 x<100
- 发送持续时间至少为 10 毫秒的数据包(例如:48 kHz 时的 480 个样本)
对于解码部分,当一个数据包丢失时,在下一个数据包上调用解码函数,首先使用fec=1,然后再次使用fec=0。
当使用fec=1 调用decode 时,发送的pcm 将被完全填充。
如果您不知道 pcm 的长度 在解码器上使用 OPUS_GET_LAST_PACKET_DURATION(x) 其中 x 将获得最后一个数据包的持续时间。
我正在尝试使用 opus 前向纠错 (FEC) 功能。 我有一项使用 OPUS_SET_INBAND_FEC(1) 进行编码的服务 OPUS_SET_PACKET_LOSS_PERC(20) 使用 10ms 数据包并通过 UDP 发送它们。
虽然我不清楚解码过程。
- 当一个数据包丢失时,我是否只需要使用 fec=1 调用解码,或者我是否需要在下一个数据包之后也使用 fec=0 调用解码?
- 我如何预先知道我发送以在启用 fec 的情况下进行解码的 pcm 的大小?
我成功了。
题中编码部分正确:
- 使用编码器 OPUS_SET_INBAND_FEC(1) 和 OPUS_SET_PACKET_LOSS_PERC(X) 其中 x>0 和 x<100
- 发送持续时间至少为 10 毫秒的数据包(例如:48 kHz 时的 480 个样本)
对于解码部分,当一个数据包丢失时,在下一个数据包上调用解码函数,首先使用fec=1,然后再次使用fec=0。
当使用fec=1 调用decode 时,发送的pcm 将被完全填充。 如果您不知道 pcm 的长度 在解码器上使用 OPUS_GET_LAST_PACKET_DURATION(x) 其中 x 将获得最后一个数据包的持续时间。