簡體   English   中英

Mp3 ID3標簽,APIC幀結構混亂

[英]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從哪里開始。

文件 1

文件 2

如果有人從谷歌找到這個,實際的答案是你必須注意幀 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM