Warm tip: This article is reproduced from serverfault.com, please click

audio-如何从node.js应用程序检测损坏/不完整的MP3文件?

(audio - How can I detect corrupt/incomplete MP3 file, from a node.js app?)

发布于 2020-12-01 17:52:48

MP3文件完整性不正确的常见情况是文件已部分上传到服务器。在这种情况下,指示的音频持续时间与MP3文件中的实际音频持续时间不符:我们可以听到开始的声音,但是在某些时候播放停止,并且指示的音频播放器持续时间中断了。

我尝试使用诸如node-ffprobe之类的库,但似乎它们只是读取元数据,而没有与文件中的真实音频数据进行比较。有没有办法从node.js有效地检测损坏或不完整的MP3文件?

注意:上载MP3文件的客户端是一种硬件(录音机),它在FTP服务器上上载文件。不是浏览器。因此,我无法从客户端上传可能更有用的数据。

Questioner
Etienne
Viewed
0
Brad 2020-12-02 02:25:30

MP3文件通常没有持续时间。它们只是一系列MPEG帧。有时,会有一个ID3标签指示持续时间,但并非总是如此。

玩家可以通过选择以下几种方法之一来确定持续时间:

  • 解码整个音频文件。
    这是最慢的方法,但是如果你仍然要解码文件,则最好使用此路由,因为它会为你提供确切的持续时间。
  • 阅读整个文件,浏览框架标题。
    你必须从磁盘读取整个文件,但不必对其进行解码。如果I / O速度较慢,但​​速度会很慢,但是会提供确切的持续时间。
  • 读取第一帧的比特率,并根据文件大小估算持续时间。
    绝对是最快的方法,也是玩家最常用的一种方法。持续时间仅是估计值,对于CBR来说是相当准确的,但对于VBR来说可能是非常不准确的。

我要说的是这些文件实际上可能没有损坏。它们可能只是你的播放器不知道持续时间的VBR文件。

如果你确信它们已损坏(例如在内容中间停止),则必须弄清楚如何处理它。可能只有几种方法可以确定这一点:

  • 理想情况下,有一个ID3标签指示持续时间,你可以解码整个文件并确定要比较的实际持续时间。
  • 通常,该ID3标签不存在,因此你必须检查最后一帧是否完整。

除此之外,由于没有外部容器实际指定期望的帧数,因此你实际上并没有很好的方法来知道流是否不完整。