HTML5 音频:设置 currentTime 然后在 iPhone 上播放自发倒带 50-100 毫秒

Posted

技术标签:

【中文标题】HTML5 音频:设置 currentTime 然后在 iPhone 上播放自发倒带 50-100 毫秒【英文标题】:HTML5 Audio: Setting currentTime and then playing on iPhone spontaneously rewinds 50-100 milliseconds 【发布时间】:2016-12-14 03:51:47 【问题描述】:

我正在尝试从文件中的特定位置播放音频,同时还使用 onTimeUpdate 事件接收播放更新。我检查 onTimeUpdate 处理程序中的 currentTime 属性,以便我可以提供关于我们在文件中的位置的视觉反馈。

我的问题是,当我将 currentTime 设置为已知值然后调用 play() 时,我第一次在我的 onTimeUpdate 处理程序中获取 currentTime 属性时,它将与我设置的一样。但是下次调用 onTimeUpdate 时,它​​实际上比我最初开始播放时的值,有时会小 100 多毫秒!

例如:

player.currentTime = 2.0;
player.play();

然后,从我的 onTimeUpdate 处理程序中输出 player.currentTime:

2
1.95 // WTF??
2.24
2.56
...

问题在于,这会导致我的 UI 小部件指示轨道中的当前位置来回跳转。我正在实施一个笨拙的解决方法,但我想知道是否有任何已知的方法可以阻止这种情况发生,或者我只是没有做正确的事情。

据我所知,它只发生在 iPhone 上。我正在使用 iPhone 6 和 ios 10.1.1 进行测试。

如果您想亲眼看看,这里有一个演示。

http://codepen.io/brianrak/pen/7db413c4431827fe3318e99ae497cf2a?editors=1010

提前致谢!

【问题讨论】:

【参考方案1】:
var second = ("0" + parseInt(player.currentTime % 60)).slice(-2);
var minutes = ("0" + parseInt((player.currentTime / 60) % 60)).slice(-2);

【讨论】:

虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性的 cmets 挤满你的代码,这会降低代码和解释的可读性!

以上是关于HTML5 音频:设置 currentTime 然后在 iPhone 上播放自发倒带 50-100 毫秒的主要内容,如果未能解决你的问题,请参考以下文章

html5 音频:更改 currentTime 会触发多个 canplay 事件

html5 音频 currentTime 不起作用

HTML5 音频 - 测试无效状态错误(或 Dom 异常 11)

html5 视频在设置 currentTime 后等待 readystate == 4

为啥html5里面的audio的currentTime无法设置

Android html5 video js设置currentTime不准确,解决办法。