【发布时间】:2014-08-03 03:28:08
【问题描述】:
我一直在寻找解决这个问题的方法,但我仍然没有找到。我们的应用需要使用player.getCurrentTime() 轮询YouTube 视频对象来驱动一些屏幕动画。使用 flash API 这很棒,因为我们可以以40ms 间隔(25 FPS)轮询播放器并获得非常准确的当前播放器时间值。我们现在已经开始使用 iFrame API,遗憾的是它不允许任何接近该精度水平的东西。我做了一些研究,似乎因为它是一个 iFrame,所以 postMessage 用于将玩家状态暴露给 player.getCurrentTime() 调用。不幸的是,这个 post message 事件很少被触发 - 有时低至每秒 4 次。更糟糕的是,消息触发的实际速率似乎取决于浏览器的渲染引擎。
有谁知道是否可以强制渲染引擎更频繁地触发这些消息,以便在轮询玩家时获得更大的时间分辨率?我试过requestAnimationFrame 并没有解决问题。有没有人成功地让 iFrame 播放器报告更准确和更频繁的时间?
【问题讨论】:
-
postMessage 的频率不是特别高的原因是它每次都必须发送一些相当大的 json 数据包,并且性能开始受到影响(这也是它不一致的原因;正如您所建议的,它使用基于渲染可用性的内部间隔来触发事件——可能是 iframe 内的 requestAnimationFrame 。他们还没有公开任何改变帖子频率或访问底层视频文件的方法(例如,使用原生 HTML5 媒体 API 来获取时间)。令人沮丧,但我现在不知道有什么办法解决它
-
感谢您提供更多信息。确实非常令人沮丧。我什至尝试在玩家轮询间隔之间使用我自己的高分辨率计时器来补间我的动画。这甚至不起作用,因为玩家返回的当前时间不一致。例如,它仅返回上一个 postMessage 事件的时间,该事件可能发生在 150 毫秒前。使用补间,动画看起来很流畅,直到您需要使用播放器的实际时间更新它,此时您将获得时间校正和生涩的动画校正。确实非常令人沮丧。
标签: html video iframe youtube-api youtube-iframe-api