我正在使用 VoIP 应用程序设置将一些文件编码为 ffmpeg 中的 opus 格式(这是为了研究)。
您可以设置的参数之一是预期数据包丢失 (%)。我了解数据包丢失背后的原理,但是,我无法弄清楚此设置实际上对生成的文件有何影响,因为没有发生传输。
任何见解都将不胜感激。
答案1
您指定的数据包丢失越多,文件中编码的冗余数据就越多,以便能够应对它。
http://blogs.asterisk.org/2017/04/12/asterisk-opus-packet-loss-fec/
如上所述,FEC 是由 Opus 编码器在带内添加的,但只有在配置完成后才可以这样做。上一篇文章已经讨论了您可以在编码器上设置的所有可用选项,因此如果您还没有查看,请务必查看。不过,在这里我们将讨论其中一些选项以及它们如何组合使用以使编码器包含 FEC 数据。如 Opus FAQ 中所述,在编码器向帧添加纠错之前,必须满足几个条件:
- 必须启用该功能。必须为定义的格式设置“fec”选项(注意,可以在 codecs.conf 中设置 Asterisk 编解码器 Opus 的选项)。此选项默认为“否”,因此如果您未专门启用它,Asterisk 在编码时将不会包含 FEC 数据。
- 必须告知编码器预计会丢失数据。这意味着还必须指定估计的数据包丢失百分比。设置此项会改变编码器开始包含 FEC 数据的阈值。数字越高,阈值越低。
- 编解码器必须以有利于较低带宽的模式运行。确保将最大带宽设置为窄带或中带。这可以通过调整“max_bandwidth”选项来实现。您可以直接通过设置选项本身来实现,也可以间接通过将“max_playback_rate”选项设置为 16khz 或更低来实现。
不要忘记确保双方都已协商好 FEC。如果一切设置正确,但一方不提供 FEC(“useinbandfec=yes”),则不会启用 FEC。