我注意到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);
才真正浪费带宽。这是一个错误吗?还有更好的方法吗?
答案 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()
来解决此问题。