javascript - Mp3 ID3标签,令人困惑的APIC框架结构

标签 javascript byte mp3 id3 reader

我正在开发一个用于 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开始。

File 1

File 2

最佳答案

如果有人从谷歌上找到这个,实际的答案是你必须注意帧头末尾的两个标志字节。一些标志表示扩展 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/

相关文章:

javascript - jQuery html() 函数在看到标签时停止

javascript - 更改事件的 fullPage.js 选项

java - 如何将字节数组中的 37 位更改为现有值的所有补码

android - 如何以编程方式在android中从sdcard中查找mp3文件

audio - 使用 ffmpeg : no effect 与 -itsoffset 合并的 mp3 音频

javascript - 拖出链接后 jQuery mouseup 不触发

javascript - 使用 AJAX 重新加载 html 页面

java - 从 2 字节大端读取 16 位整数

Java 字节和浮点乘法

java - 如何判断 MediaPlayer 是否正在播放?