学习erlang的时候,有一个mpeg数据帧解析的例子,正好在网上找到这个转来一起学习了。
MPEG音频文件,由一个个的帧(Frame)组成。
每一MPEG帧都有个帧头(Frame Header),位于帧的最开始处,接下来的是音频数据(Audio Sample/Audio Data),即:
MPEG帧 = MPEG帧头 + MPEG音频数据
下面分别详细介绍MPEG帧头和音频数据的细节内容:
MPEG音频的三种Layer的,尽管他们的压缩方法各不相同,但是帧头格式都一样。
先说一下大小,MPEG帧头,共32bit=4字节。
然后再看具体的格式及含义,如下所示:
表 3.1. MPEG音频的帧头的格式
位置(bit) | 长度(bit) | 含义 | 示例 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 11 | 用于同步帧,找到此帧头(所有位均置1) | 1111 1111 111 | ||||||||||
11 | 2 |
| 11 | ||||||||||
13 | 2 |
| 01 | ||||||||||
15 | 1 |
| 1 | ||||||||||
16 | 4 | 详见:表 3.2 “MPEG比特率索引表(单位:Kbit/s)” | 1001 | ||||||||||
20 | 2 | 详见:表 3.3 “MPEG帧的采样率索引表(单位:Hz)” | 11 | ||||||||||
22 | 1 | 填充位。如果设置了此位,就会对每帧数据填充一个slot (对于帧大小的计算很重要) | 0 | ||||||||||
23 | 1 | 私有位 (仅用于标示性的) | 1 | ||||||||||
24 | 2 |
| 01 | ||||||||||
26 | 2 | 模式扩展 (仅用于联合立体声) (注:此处不是本文重点,故忽略相关的索引表) | 00 |
表 3.2. MPEG比特率索引表(单位:Kbit/s)
比特率索引 | MPEG 1 | MPEG 2, 2.5 (LSF) | |||
---|---|---|---|---|---|
Layer I | Layer II | Layer III | Layer I | Layer II & III | |
0000 | 空闲 | ||||
0001 | 32 | 32 | 32 | 32 | 8 |
0010 | 64 | 48 | 40 | 48 | 16 |
0011 | 96 | 56 | 48 | 56 | 24 |
0100 | 128 | 64 | 56 | 64 | 32 |
0101 | 160 | 80 | 64 | 80 | 40 |
0110 | 192 | 96 | 80 | 96 | 48 |
0111 | 224 | 112 | 96 | 112 | 56 |
1000 | 256 | 128 | 112 | 128 | 64 |
1001 | 288 | 160 | 128 | 144 | 80 |
1010 | 320 | 192 | 160 | 160 | 96 |
1011 | 352 | 224 | 192 | 176 | 112 |
1100 | 384 | 256 | 224 | 192 | 128 |
1101 | 416 | 320 | 256 | 224 | 144 |
1110 | 448 | 384 | 320 | 256 | 160 |
1111 | 空闲 |
![]() | 常见MP3的比特率 |
---|---|
强调部分:就是我们此处所关心的MP3(MPEG-1,Layer III)的比特率。 红色部分:即128kbps,192kbps,320kbps等,就是我们常见的MP3的比特率。 |
表 3.3. MPEG帧的采样率索引表(单位:Hz)
采样率索引 | MPEG 1 | MPEG 2 (LSF) | MPEG 2.5 (LSF) |
---|---|---|---|
00 | 44100 Hz | 22050 Hz | 11025 Hz |
01 | 48000 Hz | 24000 Hz | 12000 Hz |
10 | 32000 Hz | 16000 Hz | 8000 Hz |
11 | 空闲 |
![]() | 常见MP3采样率 |
---|---|
强调部分:就是我们最常见的MP3(MPEG-1)的采样率44100Hz=44.1K Hz |
从上面MPEG帧头的格式中可以看出,MPEG的音频,都是有相对固定的比特率,采样率等参数,关于这每一帧的这些参数的具体值,都是找到索引值,然后查对应的索引表,而得知具体的值。
不过,顺便提一点,在MPEG标准中,也描述了一种自由格式(free format),这种自由格式意思为用一个固定比特率对文件进行编码,而此固定的比特率不是我们那些索引表中所预定义好的。对于这类自由格式的MPEG音频,一般的解码器都无法解码。