audio - MP3文件中的前导结构是真正的框架吗?

标签 audio mp3 codec file-format mpeg

我现在正在做一些解码 MP3 文件的工作,但只是对 MP3 文件有一些基本的了解。这些天我为 MP3 实现了一个简单的解码器。当将解码结果与Maaate的结果进行比较时解码器,我遇到了这个问题。

我的解码器比 Maaate 解码器多提取一帧。仔细查看了一个示例MP3文件的结果,我发现第一帧是异常的。对于我的示例文件,第一帧长 413 字节,帧头 0xfffb9064与所有其他具有 100 字节长度和 header 的帧不同 0xfffb1064 .

我的问题是 :
结果中的第一个“帧”是真实帧吗?是这样,为什么看起来和别人不一样?如果不是,这个结构是做什么用的,如何与其他结构区分开来,因为它们共享帧同步码0xfff ?

最佳答案

MP3 流没有文件头。开头只有一帧比其他帧长,这听起来有点奇怪,但这是完全合法的。

标题中的位的快速描述位于:http://www.datavoyage.com/mpgscript/mpeghdr.htm

在您的情况下,两种类型的 header 共享:

  • MPEG-1
  • 第 3 层
  • 不 protected
  • 44.1kHz
  • 无填充
  • 非私密
  • M/S联合立体声
  • 无版权
  • 原创媒体
  • 没有重点

  • 第一帧与其他帧的不同之处在于:
  • 128kbit(导致 417 字节帧减去 4 字节 header )

  • 其余的是:
  • 32kbit(导致 104 字节帧减去 4 字节 header )

  • 该页面中有一个基于标题计算帧大小的公式:144*比特率/采样率+填充。

    我怀疑 128kbit 的第一帧是用于生成样本的编码器的人工制品(错误)。在第一帧之后,它仍然是一个 32kbit 的恒定比特率文件。鉴于 MP3 解码器在有几帧之前无法产生输出,并且它不会在中途突然遇到比特率的颠簸,这不太可能扰乱任何事情。

    关于audio - MP3文件中的前导结构是真正的框架吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5710598/

    相关文章:

    windows - 音频输出(我听到的)到 UPnP 设备

    javascript - mp3 歌曲无法在 Firefox 中播放

    android - 在Android onTouch上播放音频

    c# - 如何判断文件类型?

    java - 适用于 Android 的媒体文件格式转换器 API

    ffmpeg - 在 h265 中关闭帧内预测

    c++ - QT (C++) 中的简单声音 (.wav) 播放应用程序

    javascript - kinetic.js 循环中多个点击事件,但只注册最后一个

    c++ - 按位运算比调用memcpy更快吗?

    javascript - 如何在 Firefox 中从 getStats() API 获取 AudioLevel 和 Codec 值?