双11物流会很慢吗:如何计算VBR MP3的播放时间/持续时间

来源:百度文库 编辑:偶看新闻 时间:2024/07/06 11:32:45
如何计算VBR MP3的播放时间/持续时间【未完待续】
2009-09-01 18:26
 
先聊几句闲话,最近遇到这个问题,百度找到的资料,极个别能说清楚一点的,最后还是找到了,很久之前看到的一个英文帖子,说的比较清楚,并且还有实例代码。在此感谢之。另外也有点无语,中文资料,的确是没几个人去说清楚。。。
而且,下列解释,主要也就是参考了这个帖子。
MPEG Audio Frame Header
http://www.codeproject.com/KB/audio-video/mpegaudioinfo.aspx
【MP3的一些基础知识】
想要了解如何计算VBR的MP3的播放时间之前,要简单了解一些MP3文件的一些基本概念:
1.帧:通俗点说,就是一段连续的数据块。是MP3文件,也是其他很多音视频技术中的基本概念。
MP3是由很多很多个这样的帧所组成的。
2.帧头:数据帧的头。也就是,专门在数据帧里面,有头部有一些数据,具体不同的位对应不同的含义,用于描述MP3文件的一些参数信息或者当前数据帧的信息。用于解码。
3.采样率:每秒采样多少。
4.CBR和VBR:即Constantbitrate (CBR)固定(/不变)比特率,和Variable bitrate (VBR)不定比特率。说的是MP3的比特率是否固定。
更详细的信息,请自己查找相关资料。
【CBR的MP3的播放时间计算方法】
这个,网上资料相对多点,此处简单说一下我的理解,主要也就是翻译那个英文帖子了。。。
MP3播放时间=MP3的文件大小FileSize/帧大小FrameSize * 每一帧的时间SecPerFrame
其中的Frame Size = ( (Samples Per Frame / 8 * Bitrate) / Sampling Rate) + Padding Size
而其中的Samples Per Frame和bitrate以及Sampling Rate,Padding Size,
都是可以直接从MPEG的帧头中,按照格式一点点分析出来的。然后,对于MP3播放时间,就可以直接计算出来了。
【如何计算VBR MP3的播放时间】
真是对此问题感兴趣的人,总的来说,都是已经知道了上面说的如何计算CBR的MP3的播放时间之后,但是对于VBR的计算方法不清楚,才会来关注这个问题的。
位置
长度
含义
示例
0
11
用于同步帧,找到此帧头(所有位均置1)
1111 1111 111
11
2
音频版本ID (参见 表3.2)
00 - 版本是MPEG 2.5 (MPED-2的非官方扩展版本)
01 – 保留
10 – 版本是MPEG 2 (ISO/IEC 13818-3)
11 – 版本是MPEG 1 (ISO/IEC 11172-3)
11
13
2
Layer 的索引
00 – 保留
01 - Layer III
10 - Layer II
11 - Layer I
01
15
1
保护位
0 – 用16位的CRC保护下面的帧头
1 – 无CRC
1
16
4
比特率索引 (参见 表2.1.3)
1001
20
2
采样率索引 (参见表2.1.2)
11
22
1
填充位
如果设置了,就会对每帧数据填充一个slot (对于帧大小的计算很重要)
0
23
1
私有位 (仅用于标示性的)
1
24
2
声道的模式
00 – 立体声
01 – 混合立体声
10 – 双声道 (两个单声道)
11 – 一个声道 (单声道)
注: 双声道文件由两个独立的单声道所组成。大多数解码器把双声道输出成立体声,但是实际上,不是所有的双声道都是立体声的。
01
26
2
模式扩展 (仅用于联合立体声)
(参见 表 2.1.6)
00
 
表 2.1.1MPEG音频帧头的格式
按照上表,通过对头进行解析,可以解析出来对应的,我们计算VBR MP3播放时间所需要的参数:
 
【未完待续】
 
 
about TOC:
Xing VBR header
If first bit of flags is set,
100*1 bytes 100 1-byte TOC entries
Every TOC entry contains the size of the n-th frame. Calculating the position
of the 3rd frame should look as following: header_size + toc[0] + toc[1] + toc[2]