如何在Safari中获取音频文件的持续时间?

时间:2015-12-13 19:30:41

标签: javascript safari html5-audio

我注意到Safari在获取音频文件的持续时间方面有点不可预测。我写了下面的代码来获取和存储MP3文件的持续时间:

audio.src

你可以看到我必须添加一些代码,因为在Safari中仅仅将loadedmetadata设置为URL并不总是足够,尽管它在Firefox和Chrome中运行良好并且每次都会触发loadedmetadata事件。在Safari中,由于某种原因它只能工作一半左右。

audio.src设置为网址后,是否有可能在Safari中无法触发audio.play()?为了获得音频文件持续时间(我正在使用Amazon S3),必须调用SELECT air.address.postcode, air.patient.name FROM air.address INNER JOIN air.patient ON patient.address_id = address.address_id; SELECT postcode as postcode FROM air.postcode, air.focusarea WHERE air.focusarea.objectid = 1 AND ST_Intersects(air.postcode.geom, air.focusarea.geom); 才真正浪费带宽。这是一个错误吗?还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

在显式使用load()更改源代码后,您可能需要重新加载。见http://www.w3schools.com/tags/av_met_load.asp

  

load()方法用于更新音频/视频元素   更改来源或其他设置。

我想你可能想要一试。

audio.src = track.getTrackUrl();
audio.load();

总的来说,这个html5音频元素在我的体验中有点儿麻烦。如果你不介意一些额外的javascript,现在尝试使用像JPlayer这样的jQuery播放器,并在所有浏览器中正确实现时使用html5音频。

至于这种行为的原因:设置src可能会使浏览器开始异步加载文件。在未完成加载时调用play(),sasfari似乎跳过了loadedmetadata侦听器,而是调用了canplay事件。您可以使用Audio.preload = 'metadata'然后调用load()来解决此问题。