有没有办法比 DTX 更好地优化 Opus 中的静音期?

Posted

技术标签:

【中文标题】有没有办法比 DTX 更好地优化 Opus 中的静音期?【英文标题】:Is there a way to optimize silence periods in Opus better than DTX does? 【发布时间】:2016-10-05 03:42:24 【问题描述】:

我正在研究 Opus 中的 DTX 选项:

不连续传输 (DTX) 会降低静音期间的比特率 或背景噪音。启用 DTX 时,仅编码一帧 每 400 毫秒。

我想知道是否有一种简单的方法可以让 Opus 在整个静音期间只编码一帧,而不是每 400 毫秒编码一次无用的静音帧?

我想在静默或非语音活动期间产生“绝对”静默,并尽量减少标题的开销,所以基本上静默录音会产生一个几乎空的文件。

如果有其他编解码器可以做到这一点,我很高兴听到他们的消息。

【问题讨论】:

我觉得把DTX窗口放大一点好处不大,400ms已经很大了。 格式不就是压缩了吗?这意味着连续的“空白”帧不会占用空间。 【参考方案1】:

我没有对此进行测试,但我非常有信心可以做到,但是,您将打破 standards 的哪个状态:

2.1.9。非连续传输 (DTX)

不连续传输 (DTX) 会降低静音期间的比特率 或背景噪音。启用 DTX 时,仅编码一帧 每 400 毫秒。

Download the source code,打开文件 ./silk/define.h 并将第 57 行 [Linux 源代码] 从

#define MAX_CONSECUTIVE_DTX 20 /* eq 400 ms */

类似

#define MAX_CONSECUTIVE_DTX 40 /* eq 800 ms */

或任何你认为足够的东西。在不更改源代码的情况下,我认为这是不可能的,因为如所述here

尽管 Opus 现在已被 IETF 标准化,但这个 Opus 今后的实施将不断完善。当然,所有 未来的版本仍将完全符合 Opus IETF 规范。

【讨论】:

我还应该指出,Opus 在协议规范中是不寻常的,因为它是根据参考实现而不是散文标准来定义的。在撰写本文时,Opus 的参考实现在 RFC 6716 和 8251 中给出。 格式不就是压缩了吗?这意味着连续的“空白”帧将不占用空间。通过更改此值并查看是否有任何大小差异可以很容易地进行测试......我强烈怀疑会有。

以上是关于有没有办法比 DTX 更好地优化 Opus 中的静音期?的主要内容,如果未能解决你的问题,请参考以下文章

优化缓慢的 MySQL 选择查询

如果条件为假,我可以在Rust中使用什么运算符来返回特定错误?

一起玩转LiteOS组件:Opus

在 PayPal 沙盒中测试定期付款

Fluke DTX-CHA001/DTX-CHA001A/DTX-CHA002的区别

Fluke DTX-CHA001/DTX-CHA001A/DTX-CHA002的区别