我正在开发一个用于 Mp3 文件的 JavaScript(前端)ID3 标签阅读器。我设法解析文本框架。现在,APIC 框架对我来说没有任何意义。
根据官方规范,每一帧都以此开头:
Frame ID $xx xx xx xx (four characters)
Size 4 * %0xxxxxxx
Flags $xx xx
这是 APIC 框架结构:
<Header for 'Attached picture', ID: "APIC">
Text encoding $xx
MIME type <text string> $00
Picture type $xx
Description <text string according to encoding> $00 (00)
Picture data <binary data>
我附上了用 Sublime Text 以 UTF-8 编码打开的 2 首歌曲的屏幕截图。所以,我希望看到MIME type
紧接在“APIC”字之后的第 7 个字节(帧大小 + 标志 + APIC 文本编码)之后。适用于第一个文件,但第二个文件在实际 MIME 类型之前还有 2 个字节。我还有其他文件,其中 MIME type
以一些奇怪的字节为前缀(不一定是 2 个字节)。 picture type
byte 似乎更简单,尽管它后面跟着一个 0x00 字节(文档没有说明它后面跟着 $00),并且有时会丢失实际值。我不确定description
在哪里部分实际上停止了,picture data
开始。
最佳答案
如果有人从谷歌上找到这个,实际的答案是你必须注意帧头末尾的两个标志字节。一些标志表示扩展 header 。
我不明白你的屏幕截图中的符号,但我个人有一个文件:
41 50 49 43 //APIC
00 08 5A 04 //Frame Size
00 03 //Flags: Unsynchronisation | Data Length Indicator.
00 02 19 F5 //4 bytes data length
00 //1 byte text encoding (ISO-8859-1)
69 6D 61 67 //image/jpeg
65 2F 6A 70 // ”
65 67 // ”
得到的扩展长度is in the ID3v2.4 spec (4.1.2) 。我的示例中的数据长度指示器始终附加 4 个字节。扩展字节的顺序显然与标志位相同。
所以TL;DR:帧头可以超过10个字节(标签头也可以)。
关于javascript - Mp3 ID3标签,令人困惑的APIC框架结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58023222/