4.2.3.1. Xing TAG / Xing头(header)

此tag由XING公司推出的算法/规范,所以叫做XING。

对于大多数的VBR文件都加了此头,但并不全是。此头位于MPEG音频头后面的某个特定位置(多数是0x24)。包含了此XING头的第一个帧,其后的数据是空的,所以即使解码器没有考虑到此头,也可以正常处理此帧。对于Layer III的文件来说,比如常见的MP3,此VBR放在边信息(side information)之后。

下表是XING头的具体格式及含义:

表 4.1. XING 头的格式及含义

位置(字节)长度(字节)含义示例
044个ASCII字符的VBR头 ID,要么是Xing,要么是Info,无NULL结尾(普通字符串都以NULL,即\0结尾)'Xing'
44

存放一个标志,用于表示接下来存在哪些域/字段,各字段逻辑或的结果:

0x0001存在总帧数(Frames)字段
0x0002存在文件大小(Bytes)字段
0x0004存在TOC字段
0x0008存在音频质量指示字段

0x0007 就表示下面存在:

总帧数
文件大小总字节数
TOC表
84总帧数(Frames),大端[可选]7344
8或124文件总大小,单位字节,大端[可选]45000
8,12,16100TOC表,大端[可选]
8或12, 16, 108, 112 ,1164音频质量指示,最差0,最好100,大端[可选]0


虽然知道了XING头的具体含义,可以去根据具体的值,解析出对应的含义了,但是,由于其是放在side information之后的,所以,要先定位,找到XING头,关于其位置,用如下公式计算:

公式 4.3. XING头位置

XING头位置

= MPEG头位置 + MPEG帧头大小 + 边信息大小

= MPEG头位置 + 4字节 + 边信息大小



其中:

  1. MPEG头位置:

    即通过程序去找到连续的11个bit都是1的位置,即可同步MPEG的帧,找到对应的MPEG头的开始处。

  2. 边信息大小:

    详细信息,后面用到此公式时会具体解释。

根据头的格式,Xing头里面必须包含ID和flag这两个段。其他字段都是可选的,是否包含,要看flag的值。有时候这个Xing头,CBR里面也有,此时,前面的ID的值就是Info,而不是Xing了。