首页 > 解决方案 > 是否需要考虑尺寸限制以确保 LAME 标签有效?

问题描述

我想操作 MP3 Xing/Info/LAME 标签。

我找到了一些具有各种定义的文档,但它并没有真正提到一条信息:您如何确定标签确实有效?

我之所以问,是因为我创建了 VBR 和 CBR 音频文件,并且 LAME 标签似乎出现在所有具有音频样本数据未使用空间的帧中。但在大多数情况下,可用空间对于完整的标签来说太小了。

那么,标签是否总是被认为是有效的,但我们必须注意大小并忽略缓冲区末尾之后的任何字段?或者我应该确保整个标签(208 字节?)存在,如果没有完全忽略标签?

现有的 MP3 播放器如何处理它?

标签: mp3lame

解决方案


实际上,我注意到我链接到的文档中存在一些差异,并认为我最好直接在 LAME 中搜索,看看它是如何在那里完成的。

果然,文档以许多不同的方式完全关闭。但是,我发现有趣的是 LAME 实现不会检查缓冲区是否足够大。至少GetVbrTag()函数本身只验证输入数据是第三层帧。因此,框架可能小于标签所需的尺寸(我认为可以。)可能是该函数仅在实际按预期工作的情况下才被调用。

无论如何,在编写代码时,它假定所有预期的数据都存在。它读取增加buf指针并读取数据,直到全部完成。

来源:如果您有 LAME 项目源代码,请参阅libmp3lame/VbrTag.c第 362 行(在 LAME 的 3.100 版中)了解我正在谈论的功能。


推荐阅读