mp3 - 是否需要考虑尺寸限制以确保 LAME 标签有效?
问题描述
我想操作 MP3 Xing/Info/LAME 标签。
我找到了一些具有各种定义的文档,但它并没有真正提到一条信息:您如何确定标签确实有效?
我之所以问,是因为我创建了 VBR 和 CBR 音频文件,并且 LAME 标签似乎出现在所有具有音频样本数据未使用空间的帧中。但在大多数情况下,可用空间对于完整的标签来说太小了。
那么,标签是否总是被认为是有效的,但我们必须注意大小并忽略缓冲区末尾之后的任何字段?或者我应该确保整个标签(208 字节?)存在,如果没有完全忽略标签?
现有的 MP3 播放器如何处理它?
解决方案
实际上,我注意到我链接到的文档中存在一些差异,并认为我最好直接在 LAME 中搜索,看看它是如何在那里完成的。
果然,文档以许多不同的方式完全关闭。但是,我发现有趣的是 LAME 实现不会检查缓冲区是否足够大。至少GetVbrTag()
函数本身只验证输入数据是第三层帧。因此,框架可能小于标签所需的尺寸(我认为可以。)可能是该函数仅在实际按预期工作的情况下才被调用。
无论如何,在编写代码时,它假定所有预期的数据都存在。它读取增加buf
指针并读取数据,直到全部完成。
来源:如果您有 LAME 项目源代码,请参阅libmp3lame/VbrTag.c
第 362 行(在 LAME 的 3.100 版中)了解我正在谈论的功能。
推荐阅读
- twilio - Twilio 对话 JS SDK - 获取用户对话的正确方法
- javascript - 使用 Selenium 和 python javascript execute_script 单击表单区域不起作用
- docker - 如何使用部署清单将静态 MAC 地址分配给 IoT Edge 模块
- regex - 正则表达式匹配特定变量中引号之间的单词
- c# - NPOI 的具有 CellStyle 静态值的类
- asp.net - 本地化和全球化 ASP.NET Core MVC 3.1 所有视图
- html - 如果仅设置了最大宽度,则文本右侧的空白空间
- html - 在路径上显示路径标题
- java - 如何使用 Eclipse GenModel 生成非公共类
- redux - 使用 Redux Toolkit 的调度操作需要两个参数