[英]Mp3 ID3 tags, confusing APIC frame structure
我正在為 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>
我附上了用 UTF-8 編碼的 Sublime Text 打開的 2 首歌曲的屏幕截圖。 因此,我希望在“APIC”字之后的第 7 個字節(幀大小 + 標志 + APIC 文本編碼)之后看到MIME type
。 適用於第一個文件,但在第二個文件實際 MIME 類型之前還有 2 個字節。 我還有其他文件,其中MIME type
以幾個奇怪的字節(不一定是 2 個字節)為前綴。 picture type
字節似乎更簡單,盡管它后面跟着一個 0x00 字節(文檔沒有說明它后面跟着 $00)並且實際值有時會丟失。 而且我不確定description
部分實際上在哪里停止以及picture data
從哪里開始。
如果有人從谷歌找到這個,實際的答案是你必須注意幀 header 末尾的兩個標志字節。 一些標志表示擴展的 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 // ”
生成的擴展長度在 ID3v2.4 規范 (4.1.2)中。 我的示例中的數據長度指示符總是附加 4 個字節。 擴展字節的順序顯然與標志位相同。
所以 TL;DR:幀頭可以長於 10 個字節(標簽頭也可以)。
您可以從前幾十個字節創建一個字符串。 之后使用這樣的東西:
let mime = str.match(/image\/[a-z]+/)[0];
let binaryStartIndex = str.indexOf(mime) + mime.length + 3;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.