MP3文件结构(1)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xinxiaoci/article/details/77745623

概述:整个MP3文件大体分为三部分:TAG_V2(ID3V2),音频数据帧(Frame),TAG_V1(ID3V1);

结构 描述
ID3V2 包含了作者,作曲,专辑等信息,长度不固定,扩展了ID3V1的信息量。
Frame 一系列的帧,个数由文件大小和帧长决定;每个FRAME的长度可能不固定,也可能固定,由位率bitrate决定;每个FRAME又分为帧头和数据实体两部分;帧头记录了mp3的位率,采样率,版本等信息,每个帧之间相互独立。
ID3V1 包含了作者,作曲,专辑等信息,长度为128BYTE。

1、ID3V2

ID3V2 到现在一共有4 个版本,但流行的播放软件一般只支持第3 版, 既ID3v2.3。
ID3V2.3 的标签有一个标签头和若干个标签帧(含标签帧头10字节)或一个扩展标签头组成。关于曲目的信息如标题、作者等都存放在不同的标签帧中,扩展标签头和标签帧并不是必要的,但每个标签至少要有一个标签帧。标签头和标签帧一起顺序存放在MP3 文件的首部。

标签头

在文件的首部顺序记录10 个字节的标签头。数据结构如下

标签头10字节

char Header[3]; /*必须为"ID3"否则认为标签不存在*/
char Ver; /*版本号ID3V2.3 就记录3*/
char Revision; /*副版本号此版本记录为0*/
char Flag; /*存放标志的字节,这个版本只定义了三位,稍后详细解说*/ 
char Size[4]; /*标签帧大小=包括所有标签帧头(非标签头)的10 个字节和所有的标签帧内容的大小*/
标签帧大小计算公式: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]; /*帧内容的大小,不包括帧头,不得小于1*/
char Flags[2]; /*存放标志,只定义了6 位,稍后详细解说*/
标签帧内容大小计算公式:FSize = Size[0]*0x100000000 + Size[1]*0x10000+ Size[2]*0x100 + Size[3];

猜你喜欢

转载自blog.csdn.net/xinxiaoci/article/details/77745623
今日推荐