结构描述
ID3V2包含了作者,作曲,专辑等信息,长度不固定,扩展了ID3V1的信息量。Frame一系列的帧,个数由文件大小和帧长决定;每个FRAME的长度可能不固定,也可能固定,由位率bitrate决定;每个FRAME又分为帧头和数据实体两部分;帧头记录了mp3的位率,采样率,版本等信息,每个帧之间相互独立。ID3V1包含了作者,作曲,专辑等信息,长度为128BYTE。
1、ID3V2
ID3V2 到现在一共有4 个版本,但流行的播放软件一般只支持第3 版, 既ID3v2.3。
ID3V2.3 的标签有一个标签头和若干个标签帧(含标签帧头10字节)或一个扩展标签头组成。关于曲目的信息如标题、作者等都存放在不同的标签帧中,扩展标签头和标签帧并不是必要的,但每个标签至少要有一个标签帧。标签头和标签帧一起顺序存放在MP3 文件的首部。
标签头
在文件的首部顺序记录10 个字节的标签头。数据结构如下
char Header[3];
char Ver;
char Revision;
char Flag;
char Size
[4];
标签帧大小计算公式:total_size =(Size[0]&0x7F)*0x80*0x80*0x80 +(Size[1]&0x7F)*0x80*0x80 + (Size[2]&0x7F)*0x80 +(Size[3]&0x7F)
ID3V2部分的总大小=标签帧大小+标签头大小10;
标签帧
标签帧数据的起始位置顺序记录了10个字节的标签帧头,数据结构如下
char ID
[4];
char Size
[4];
char Flags
[2];
标签帧内容大小计算公式:FSize = Size[0]*0x100000000 + Size[1]*0x10000+ Size[2]*0x100 + Size[3];