Libopus编码器的max_data_bytes字段使用什么值?

时间:2019-04-15 22:59:13

标签: opus

我目前正在使用libopus来编码我拥有的某些音频。

在查阅有关如何使用编码器的文档时,encode函数接受的参数之一是max_data_bytesopus_int32具有以下文档:

Size of the allocated memory for the output payload. May be used to impose an upper limit on the instant bitrate, but should not be used as the only bitrate control

不幸的是,关于如何设置上限大小以及该参数与比特率之间的关系,我从这个定义中得不到太多帮助。我尝试查阅提供的一些示例,例如thisthis,但是它们都将自变量定义为一些常量而没有太多信息。

有人可以帮助我理解此值的定义吗?我可能会对它使用多少数字感兴趣?谢谢!

1 个答案:

答案 0 :(得分:1)

取决于编码器版本和编码参数。

在1.1.4中,编码器不合并数据包,上限应为1275字节。对于解码器,如果使用重新打包器,则可以找到一些最大为3 * 1275的数据包。

在最新版本中可能会发生变化,我非常确定重新打包器已经以某种方式合并到了编码器中。查看RFC。

请在这里粘贴我1.5年前的一些笔记...

//Max opus frame size if 1275 as from RFC6716.

//If sample <= 20ms opus_encode return always an one frame packet.
//If celt is used and sample is 40 or 60ms, two or three frames packet is generated as max celt frame size is 20ms
//in this very specific case, the max packet size is multiplied by 2 or 3 respectively