在上传之前在JS中提取音频位和采样率信息

时间:2012-10-03 01:17:10

标签: html5 audio filereader sampling bitrate

我正在构建一个应用程序,允许经过身份验证的用户使用Web浏览器将(音频语音)MP3音频文件上传到服务器,以便在网络上分发音频。音频文件需要使用特定的比特率(32kbps或更低)以确保有效使用带宽,并获得批准的采样率(22.050或44.100)以最大限度地提高兼容性。我不希望在使用服务器端脚本上传后验证这些要求,而是希望在上传之前使用HTML5 FileReader来确定此信息。如果浏览器检测到无效的比特率和/或采样率,则可以通知用户,并且可以阻止上载尝试,直到对音频文件进行必要的修改。

这可以使用HTML5吗?请注意,问题是关于HTML5,而不是关于我的应用程序的方法。 HTML5可以检测MP3音频文件的采样率和/或比特率吗?

仅供参考:我正在使用FTP java applet来执行上传。小程序设置为在成功上传后自动将用户转发到我选择的URL。这将繁重的工作放在客户端上,而不是放在服务器上。这也是必要的,因为每个上传文件的最终目的地是不同的;它们可以位于不同的服务器和不同的域上,可能支持服务器上的不同脚本语言。否则,任何一台服务器都会快速超过其存储空间,或者如果服务器端脚本执行了FTP传输,则服务器的性能会因单点故障而迅速降低。因此,对于我的应用程序,它将上传的音频文件存储在多个服务器和多个域上,必须在客户端进行比特率和采样率的验证。

2 个答案:

答案 0 :(得分:1)

您可以使用FileReader API和Javascript构建的音频编解码器从音频文件中提取此信息。

为纯JS编解码器提供基本代码的一个库是Aurora.js - 然后实际的编解码器代码构建在它上面

https://github.com/audiocogs/aurora.js/wiki/Known-Uses

当然,浏览器必须支持FileReader API。

我不明白你的用例为什么你需要Java applet或FTP。如果使用异步badckend(如Node.js,Python Twisted)和可扩展存储(Amazon S3)正确完成,HTTP上传对多个大文件都可以正常工作。类似的用例是调整传入图像的大小,这比从文件中提取音频元数据要求更高。客户端的唯一好处是减少不那么技术意识的用户不必要的上传次数。

答案 1 :(得分:0)

鉴于任何用户都可以更改您的脚本/标记以绕过它甚至重新使用它,我甚至不会考虑它。

如果有人可以通过HTML / Javascript的一些知识来更改您的验证脚本,请不要使用HTML / Javascript。 通过在服务器上对其进行验证,确保验证并进行验证更容易。