分类: 嵌入式
2013-02-22 11:53:33
主题:MPEG简介 + 如何计算CBR/VBR MP3的播放时间 - 1
版本:20090919
作者:crifan
邮箱:green-waste(At)163.com
声明:
1.本文所写内容,多数整理自自互联网,版权归原作者所有。
2.笔者知识有限,文中难免有误,欢迎批评指正。
3.欢迎盗版,盗版不究。
--------------------------------------无敌分割线-------------------------------------------
【此文目的】
1. 了解MPEG相关知识
2. 了解MP3的常见术语含义
3. 详解VBR MP3的帧头格式及含义
4. 搞懂如何去计算CBR和VBR的MP3文件的播放时间(duration)
【目录】
1.5.1 MPEG-1音频(ISO/IEC 11172-3)... 4
1.5.2 MPEG-2音频(ISO/IEC 13813-3)... 4
1.6 什么是ISO/IEC 11172-3和ISO/IEC 13818-3. 4
2.7 边信息(side information)... 6
4 MP3的播放时间的计算公式及XING和VBRI头介绍... 9
4.1 CBR的MP3的播放时间(duration)计算公式... 9
4.2 VBR的MP3的播放时间(duration)计算公式... 9
4.2.1 Xing TAG / Xing头(header)... 9
5 计算CBR和VBR的MP3文件的播放时间的步骤... 11
5.3 判断是VBR还是CBR,根据公式计算播放时间... 11
5.3.2 如果有,解析Xing头,并计算播放时间... 12
5.3.3 如果没XING头,定位出VBRI头位置,找VBRI头... 12
5.3.4 如果都没找到,说明是CBR,则计算CBR的播放时间... 12
【表格索引】
表7 Layer III的边信息(side information)... 12
想要了解如何计算VBR的MP3的播放时间之前,要简单了解一些MP3相关的一些基本概念,主要是MPEG的相关知识和编解码的一些知识:
MPEG全名Moving Pictures Experts Group,动态图像专家组,简单说就是一个专家组,专门研究一些音视频规范的,所以才叫专家,不是我们国家的“砖家”哦。这个专家组是在ISO/IEC(International Standards Organization/International Electrotechnical Commission,国际标准化组织/国际电工委员会)联合指导下成立的。这个组,专门去研究出一个数字音视频的压缩相关的规范,所以最后研究出适用于不同应用环境的N多规范。
和事物发展的过程类似,研究出这么多的规范也是,不同时期,不同的版本,针对不同的应用。也是由简到繁。并且,命名规则都是,按照阿拉伯数字从小到大的:MPEG 1,MPEG2,MPEG4,MPEG-7,最新版本,好像都有MPEG-21了。
估计有人纳闷了,为啥中间的MPEG3咋没了呢?
是没MPEG3,当然,不是被刘谦变魔术变没了,而是由于当时设计者没有规划好,导致已经设计好的MPEG2,性能太好了,都能干本来打算让MPEG3干的活了,所以后来干脆就不去再设计MPEG3了,原定计划就取消了,也就没了MPEG3。看来这个MPEG3,待遇貌似不比胎死腹中好多少。对于很多人误解的,以为MP3就是MPEG-3,也就更错的离谱了。关于MP3的名称来历,下面会再解释。
MPEG2.5,简单说就是出身不正,不是官方推出的规范。MPEG 2.5是针对MPEG2的一个非官方的扩展版本,支持更低的采样率。关于其更多解释,网上找到这些:
MPEG声音标准提供三个独立的压缩层次:Layer I、Layer II和Layer III。用户具体选哪个Layer,可以根据自己的要求,在权衡复杂性和声音质量之后,做出自己的选择。
A.Layer I的编码器最为简单,编码器的输出数据率为384 kb/s,主要用于小型数字盒式磁带(digital compact cassette,DCC)。
B.Layer II的编码器的复杂程度属中等,编码器的输出数据率为256 kb/s~192 kb/s,其应用包括数字广播声音(digital broadcast audio,DBA)、数字音乐、CD-I(compact disc-interactive)和VCD(video compact disc)等。
C.Layer III的编码器最为复杂,编码器的输出数据率为64 kb/s,主要应用于ISDN上的声音传输。 MPEG-1 Layer III支持的采样率为32,44.1,48khz,比特率支持32---320kbps MPEG-2 Layer III支持的采样率为16,22.05,24khz,比特率支持8---160kbps
Fraunhofer对此又进行扩展,将原来MPEG-2所支持的低采样率再除以2,得到: 8, 11.025, 和 12 kHz,比特率跟MPEG-2相同,称为 "MPEG 2.5"。
对于Layer I和Layer II,不同的帧之间,是互相独立的。也就意味着,你可以任意截取MPEG的音频文件,然后找到第一个正确的帧头,然后解码,然后接下来放余下的帧,这样都可以正确的播放。而对于Layer III,所有帧不保证都是互相独立的。由于可能用到“字节蓄水池(byte reservoir)”,即内部的一个数据缓存,这些帧,都是相关的,最差情况下,要连续缓冲保存9个帧,才能对第一帧解码。
其描述了三层音频编码,具有如下特性:
A. 一个或两个音频声道
B. 采样率32KHz、44.1KHz或48KHz
C.比特率从32Kbps到448Kbps
D.每一层都有其自己的其他特点。
其包含了对MPEG-1的两种扩展。通常称为MEGP-2/低采样率(LSF)和MPEG-2/多声道(Multichannel)。
1.5.2.1 MPEG-2/LSF的特性:
A. 一个或两个音频声道
B. 采样率只有MPEG-1的一半
C.比特率从8Kpbs到256Kbps
1.5.2.2 MPEG-2/多声道,的特性:
A. 多达5个全范围的音频声道和一个LFE(Low Frequency Enhancement,也叫做 重低音)声道
B. 采样率和MPEG-1相同
C.对于5.1声道,最高的比特率可达1Mpbs
由于MPEG只是ISO/IEC下面的一个组织,所以,关于MPEG音频部分的规范,也多是出自ISO/IEC之手。
因此,ISO/IEC 11172和ISO/IEC 13818,其实就是MPEG1的音频部分和MPEG-2的别名。
另外,由于MPEG-1和MPEG-2,每个都分好几个部分,其中,第三部分是关于音频的。所以,ISO/IEC 11172-3和ISO/IEC 13818-3,就分别对应着MPEG-1的音频,MPEG-2的音频,也就是我们常常提到的MPEG的音频文件所对应的规范。
知道了MPEG的来龙去脉后,在了解MP3的播放时间如何计算之前,也要知道其他一些,和MP3相关的知识,和常见的术语:
注意,这个MP3,不是MPEG-3,但是为何叫MP3,是因为:
MPEG规范中规定了,每一个版本的MPEG,比如MPEG1,MPEG2等,都有三种不同的Layer,不同Layer的序号命令是以罗马数字的,所以叫做Layer I, Layer II, Layer III。
其中,最常见的就是MPEG 1 的Layer III,就是众所周知的MP3。
根据事物发展由简到繁的规律,我们知道,Layer III,相对Layer I和Layer II,其有着更复杂的压缩算法。正是其相对复杂,用了很多算法,比如声学上的掩蔽效应(masking effect),Huffman压缩等,使得尽可能保持音质的基础上,极大地减少了音频文件大小,也就是说,尽量让你听上去音频声音和音质都没啥变化,但是MP3的文件大小,相对于原先没处理的,或者其他格式的,比如WAV格式等,要小很多,方便大家互相传播交流。这也是MP3如此流行的主要原因之一。
MPEG2/2.5 也常被简称为LSF(Low Sampling Frequencies),低采样率。
通俗点说,就是一段连续的数据块。对于MPEG音频文件本身,并没有什么文件头,而是由很多数据块所组成,这样的单个的数据块,就叫做一个(数据/音频)帧(frame)。MP3文件,同理,由很多个帧所组成。帧,也是其他很多音视频技术中的基本单位。
每一个帧里面,包含了帧头和音频数据。帧头,就是在帧的头部,有一定长度的数据,用于描述改帧音频的一些参数,用于解码器对此音频帧进行解码。对于MPEG的帧头,是固定的32 比特,即4字节。
CBR(Constant bitrate)固定(/不变)比特率,VBR(Variable bitrate ),不定(/可变)比特率,变与不变,指的是MP3的比特率是否固定。音频文件可以被编码成CBR或VBR。VBR意思就是,每一帧的比特率不同。由于VBR可以在需要的时候,采用高比特率,所以,一般来说,VBR的音质比CBR的要好。
很多种音视频文件,都可以按照VBR来压缩,比如MP3、WMA、Vorbis OGG、AAC,MPEG-2的视频等。VBR的优点是,和CBR相比,用更小的空间,即文件更小,实现更高的音质。缺点是,编码复杂度增加,编码需要更长时间,而有些硬件编码器可能和VBR不兼容。
即每秒包含/播放了多少个比特的数据。比特率常用Kbps(kilo bits per second,千比特每秒)表示。此处的千字节=1000字节,而不是1024.
在MPEG音频的帧头后面,有一些解码器会用到的一些信息,用于解码器控制音频流的播放,它就叫做 边信息。不同版本的MPEG的Layer III的边信息的大小,详见后面的表。
|