<div id="cnblogs_post_body" style="margin:0px; padding:0px; color:rgb(57,57,57); font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:21px; background-color:rgb(250,247,239); word-break:normal!important">
<p style="margin:10px auto; padding-top:0px; padding-bottom:0px"><span style="margin:0px; padding:0px"><span style="margin:0px; padding:0px; font-family:'courier new',courier; font-size:14pt">1.介绍</span></span><br style="margin:0px; padding:0px"> <br style="margin:0px; padding:0px"> <span style="margin:0px; padding:0px; font-family:'courier new',courier; font-size:12pt">这篇文章的目的是讲解MPEG音频帧头的结构(包括XING和VBRI)。并能尽快和精确地计算一个MPEG文件的播放时长。因此不会涉及到关于音频数据的编解码的相关知识。MPEG音频文件构建于layer。最常见的是MPEG-1 Layer III (既MP3),它应用了比较成熟的压缩技术。</span><br style="margin:0px; padding:0px"> <br style="margin:0px; padding:0px"> <br style="margin:0px; padding:0px"> <span style="margin:0px; padding:0px"><span style="margin:0px; padding:0px; font-family:'courier new',courier; font-size:14pt">2.MPEG音频帧</span></span><br style="margin:0px; padding:0px"> <br style="margin:0px; padding:0px"> <span style="margin:0px; padding:0px; font-family:'courier new',courier; font-size:12pt">一个MPEG音频文件是由很多帧数据组成。每一帧包含了一个帧头以及其后的音频数据。同一个文件每一帧的音频数据的采样次数总是相同的。Layer II,II,III的音频帧头都是相同的,不同之处体现在音频数据的编码方式。帧本身是由slot组成的。Layer I的slot大小是4字节,其余情况是1字节。</span><br style="margin:0px; padding:0px"> <br style="margin:0px; padding:0px"> <span style="margin:0px; padding:0px; font-family:'courier new',courier; font-size:12pt">除了Layer之外,MPEG音频本身也有3个版本,这个几个版本的不同之处体现在能处理的采样率不同(参考 表2.1.2)。MPEG 1 (ISO/IEC 13818-3) 和MPEG 2 (ISO/IEC 11172-3)是ISO标准. MPEG 2.5对MPEG 2进行的非官方的扩展,它是为了支持更低的采样率。MPEG2/2.5 也常被简称为LSF(Low SamplingFrequencies),既低采样率。每个版本的MPEG都有3种不同的Layer。如果你想知道关于MPEG音频文件的更多的技术细节,请参考规范说明。你可以在<a href="http://www.mp3-tech.org/" style="margin:0px; padding:0px; color:rgb(100,102,179)">www.MP3-Tech.org</a>找到规范说明和许多其他关于MPEG有用的信息。</span><br style="margin:0px; padding:0px"> <br style="margin:0px; padding:0px"> <span style="margin:0px; padding:0px; font-family:'courier new',courier; font-size:12pt">一个文件可以被编码成恒定比特率(CBR)或可变比特率(VBR),这意味着每帧可以有不同的比特率。可变比特率的质量往往比恒定比特率编码的文件更高,因为他们可以在需要的地方使用更高的比特率。</span><br style="margin:0px; padding:0px"> <br style="margin:0px; padding:0px"> <br style="margin:0px; padding:0px"> <span style="margin:0px; padding:0px"><span style="margin:0px; padding:0px; font-family:'courier new',courier; font-size:12pt">2.1 MPEG音频帧头</span></span><br style="margin:0px; padding:0px"> <br style="margin:0px; padding:0px"> <span style="margin:0px; padding:0px; font-family:'courier new',courier; font-size:12pt">帧头位于每帧的开始处,大小通常是32bits(若Protection bit为1,则还要帧头最后添加16bits的校验位),并具有以下格式。帧头中第0位是最高有效位(MSB)。在头位的0是最重要的一点完整的头(最高位)。请注意,位置是从零开始的,位置,长度和示例都是用位格式表示。</span></p>
<table border="1" cellpadding="0" cellspacing="0" style="margin:0px; padding:0px; border-collapse:collapse; border-spacing:0px; border:1px solid rgb(192,192,192)"><tbody style="margin:0px; padding:0px"><tr style="margin:0px; padding:0px"><td style="margin:0px; padding:3px; border:1px solid rgb(192,192,192); border-collapse:collapse; word-break:normal!important"> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px"><span style="margin:0px; padding:0px; font-family:'courier new',courier; font-size:12pt">起始位置</span></p> </td><td style="margin:0px; padding:3px; border:1px solid rgb(192,192,192); border-collapse:collapse; word-break:normal!important"> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px"><span style="margin:0px; padding:0px; font-family:'courier new',courier; font-size:12pt">大小</span></p> </td><td style="margin:0px; padding:3px; border:1px solid rgb(192,192,192); border-collapse:collapse; word-break:normal!important"> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px"><span style="margin:0px; padding:0px; font-family:'courier new',courier; font-size:12pt">解释(作用)</span></p> </td><td style="margin:0px; padding:3px; border:1px solid rgb(192,192,192); border-collapse:collapse; word-break:normal!important"> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px"><span style="margin:0px; padding:0px; font |
|