我正在使用 HTML5<audio>
元素开发音频播放器,并试图解决一些跨浏览器的问题。
此播放器配置为在单击不同轨道的链接时在音轨之间切换。在内部,它暂停<audio>
元素,将其设置currentTime
为0
(如在 Android 4.0.4 设备本机浏览器中多次播放 HTML5 音频中<audio>
所述)并在使用指定的新源轨道创建新元素之前将其从 DOM 中删除。play()
在元素上调用该方法以加载曲目并开始播放。
在桌面浏览器、iPhone 和 iPad 上,这可以正常工作。它也适用于同事的三星 Galaxy S3 Mini。然而,在另一部测试手机(全尺寸三星 Galaxy S3)上,后续曲目的播放失败 - 曲目甚至无法播放,并且在播放栏中显示为已播放完毕。我的摩托罗拉 Xoom 平板电脑上的 Android 4.1.2 浏览器也是这种情况。
页面加载时指定的第一个轨道总是可以正常工作。
在 JavaScript 代码中添加了一些调试语句,特别是timeupdate
回调函数后,我发现在播放失败的情况下,<audio>
元素的值在两个实例中duration
的值为1timeupdate
。通常,持续时间报告为350到1000多一点,持续时间为 3-4 分钟。这就解释了为什么播放栏会立即将新加载的曲目显示为已完成播放。
我认为后续曲目没有正确加载;即使它之前已经加载并缓存在手机上,肯定它必须能够正确加载。所有曲目均为 MP3,可在各自的浏览器中播放。
我在这里想念什么?知道问题是什么以及如何使它起作用吗?
非常感谢。
更多信息:
我已将其他事件连接到<audio>
元素以跟踪可能发生的情况:
progress
(带有缓冲范围的报告)loadedmetadata
canplay
error
在桌面(正常工作)上,事件如下:(
timeupdate
具有 NaN 持续时间),progress
x3(0 缓冲范围)loadedmetadata
,,,,持续时间为 121.172368,canplay
具有1 个缓冲范围 [0, 11.507715],后跟一系列 和事件作为曲目继续播放。iPhone 也有类似的事件序列。timeupdate
progress
timeupdate
progress
在三星 S3 上,我收到以下事件:timeupdate
持续时间为 1,然后是progress
(0 个缓冲范围)、、、,loadedmetadata
最后canplay
是timeupdate
持续时间仍为 1 的事件。
此页面在解释事件和数据结构方面非常有用:http ://www.sitepoint.com/essential-audio-and-video-events-for-html5/