此tag由XING公司推出的算法/规范,所以叫做XING。
对于大多数的VBR文件都加了此头,但并不全是。此头位于MPEG音频头后面的某个特定位置(多数是0x24)。包含了此XING头的第一个帧,其后的数据是空的,所以即使解码器没有考虑到此头,也可以正常处理此帧。对于Layer III的文件来说,比如常见的MP3,此VBR放在边信息(side information)之后。
下表是XING头的具体格式及含义:
表 4.1. XING 头的格式及含义
位置(字节) | 长度(字节) | 含义 | 示例 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 4 | 4个ASCII字符的VBR头 ID,要么是Xing,要么是Info,无NULL结尾(普通字符串都以NULL,即\0结尾) | 'Xing' | |||||||||||
4 | 4 | 存放一个标志,用于表示接下来存在哪些域/字段,各字段逻辑或的结果:
| 0x0007 就表示下面存在:
| |||||||||||
8 | 4 | 总帧数(Frames),大端[可选] | 7344 | |||||||||||
8或12 | 4 | 文件总大小,单位字节,大端[可选] | 45000 | |||||||||||
8,12,16 | 100 | TOC表,大端[可选] | ||||||||||||
8或12, 16, 108, 112 ,116 | 4 | 音频质量指示,最差0,最好100,大端[可选] | 0 |
虽然知道了XING头的具体含义,可以去根据具体的值,解析出对应的含义了,但是,由于其是放在side information之后的,所以,要先定位,找到XING头,关于其位置,用如下公式计算:
其中:
- MPEG头位置:
即通过程序去找到连续的11个bit都是1的位置,即可同步MPEG的帧,找到对应的MPEG头的开始处。
- 边信息大小:
详细信息,后面用到此公式时会具体解释。
根据头的格式,Xing头里面必须包含ID和flag这两个段。其他字段都是可选的,是否包含,要看flag的值。有时候这个Xing头,CBR里面也有,此时,前面的ID的值就是Info,而不是Xing了。