codingWang / Issue

private space .Do NOT look at it.
3 stars 0 forks source link

MP3文件结构-草稿 #15

Open codingWang opened 6 years ago

codingWang commented 6 years ago

http://mpgedit.org/mpgedit/mpeg_format/MP3Format.html http://www.multiweb.cz/twoinches/mp3inside.htm

MPEG 音频文件是由许多的很小的独立的frame单元构成的。每一个frame都有header部分和info部分。 因为她没有文件头,所以当你切分MPEG文件的任意部分后他还能正常的播放(虽然大部分播放器能处理 不正确的header,但你最好在frame的边界处切分)。然而,对于MPEG Layer III来说,这不完全对, 由于Layer3内部数据的组织形式,frame之间互相存在依赖所以不能像上面那样随意切分。

通常情况,当你试图读一个mpeg文件的信息的时候,读第一个frame的header就够了,然后把其他的frame 当成和第一个frame相同就行了。也不完全是这情况。可变比特率MPEG文件可能会使用所谓的比特率交换, 这意味着比特率会根据每个帧的内容而变化。这样可以在不降低音质的框架中使用较低的比特率。 这使得在保持高质量的声音的同时能够更好的压缩。

frame header由一个frame中的前四个字节(32位)组成。第一个11位(或前12位,参见下面关于帧同步) 的帧头总是被设置,它们被称为“帧同步”。因此,你可以遍历这个文件,找到frame sync第一次出现 的地方(意思是找到值为255的字节,and followed by a byte with its three (or four) most significant bits set), 然后读取整个头并检查这些值是否正确。在下面的表中,您将看到标题中每一段的确切含义。指定为保留、无效、 错误或不允许的每个值应该表示无效的标题。

frames可能有CRC检查。CRC是16位长,如果存在的话,它会跟着帧头。CRC之后是音频数据。 您可以计算frame的CRC,并将其与从文件中读取的内容进行比较。这实际上是一个很好的方法来检查MPEG frame的有效性。