Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript HTML5音频标签在Chrome中显示错误的MP3持续时间_Javascript_Jquery_Html_Google Chrome_Audio - Fatal编程技术网

Javascript HTML5音频标签在Chrome中显示错误的MP3持续时间

Javascript HTML5音频标签在Chrome中显示错误的MP3持续时间,javascript,jquery,html,google-chrome,audio,Javascript,Jquery,Html,Google Chrome,Audio,当我试图通过HTML5播放器播放一些MP3时,播放器似乎返回两个不同的持续时间。当我用jQuery查询持续时间时,我会得到当前的持续时间,但是在默认的Chrome播放器中,歌曲尝试播放的时间要比歌曲实际播放的时间长得多。这在Safari(MacOSX上的7.0.1)中不是问题。是什么原因导致某些MP3出现此问题?如何让Chrome(第31节)使用正确的时间 代码如下: <audio controls="" autoplay="" name="media"><source src

当我试图通过HTML5播放器播放一些MP3时,播放器似乎返回两个不同的持续时间。当我用jQuery查询持续时间时,我会得到当前的持续时间,但是在默认的Chrome播放器中,歌曲尝试播放的时间要比歌曲实际播放的时间长得多。这在Safari(MacOSX上的7.0.1)中不是问题。是什么原因导致某些MP3出现此问题?如何让Chrome(第31节)使用正确的时间

代码如下:

<audio controls="" autoplay="" name="media"><source src="http://musicalfamilytree.com/_private/c/cowboys_the/clown-car_2.mp3" type="audio/mpeg"></audio>
<input type="button" onclick='alert($("audio")[0].duration);' value="check duration" />

以下是音频文件的JSFIDLE:
http://jsfiddle.net/spKqh/5/

这一切归结为特定的MP3文件。估计一个MP3文件的长度听起来似乎是一项简单的任务,但是没有一种正确的方法可以做到这一点。有不同的标签标准在发挥作用,有时这样的标签存储的长度,这可能是或不准确。另一种方法是确定MP3文件是恒定还是可变比特率文件,然后计算一些数字来确定长度

我的猜测是Safari使用前一种方法(使用标签进行估计)来找到126秒的真实长度,而Chrome使用后一种方法(根据比特率和文件大小进行猜测)来猜测227秒的长度。进一步解释:

我下载了有问题的MP3进行分析(小丑车2.MP3)。它的长度是9096504字节。根据回放实用程序,它以每秒320千比特的恒定比特率进行编码。假设千位为1000位:

320000 bits per second / 8 bits per byte = 40000 bytes per second
9096504 bytes / 40000 bytes per second = ~227 seconds
这是怎么回事?MP3文件以额外元数据的形式承载着大量的行李。FFmpeg将其标识为具有运动JPEG视频轨迹(可能是静态封面艺术图像)。这很可能会导致长度计算的中断

在清除元数据时,我使用FFmpeg对MP3重新编码:

ffmpeg -i clown-car_2.mp3 -vn -acodec copy clown-car_2.scrubbed.mp3
此命令忽略视频轨迹(
-vn
),并对编码音频进行无损转码(不会导致音频质量损失)。FFmpeg将此文件标识为126秒(而在此之前声明为227秒)。请注意,此新文件为5043953字节:

5043953 bytes / 40000 bytes per second = ~126 seconds

这样,你可能想通过丢失庞大的图像元数据来收紧这些MP3文件(也许考虑比320千比特/秒更低的比特率,这是MP3支持的最大值,而不是互联网流中常见的)。非常有帮助和有趣!您对使用PHP“收紧”MP3有什么建议吗?如果您绝对需要纯PHP解决方案,PHP ffmpeg可能就是您想要的:;根据您的处理管道的不同,在分段过程中脱机执行可能更容易。我正在研究该解决方案,但文档非常不完整。有没有可能用它来处理mp3文件,或者我可以收集有关mp3的信息?恐怕我对php ffmpeg不是很精通;我只知道它存在。