我正在尝试使用opus前向纠错(FEC)功能。 我有一个服务,使用OPUS_SET_INBAND_FEC(1)和OPUS_SET_PACKET_LOSS_PERC(20)对10毫秒数据包进行编码,并通过UDP发送它们。 但是,我不清楚解码过程。 当数据包丢失时,我需要仅使用fec = 1调用解码器,还是需要在下一个数据包上再次使用fec = 0调用解码器? 我如何预先知道启用fec的pcm大小以发送到解码器?
我成功使其工作了。在问题中提到的编码部分是正确的:- 使用编码器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将获取最后一个数据包的持续时间。