gpt4 book ai didi

html - YouTube HTML5 API - 在轮询播放器当前时间时是否可以获得更好的时间分辨率?

转载 作者:太空狗 更新时间:2023-10-29 14:55:40 24 4
gpt4 key购买 nike

我一直在寻找解决这个问题的方法,但我仍然没有找到。我们的应用需要使用 player.getCurrentTime() 轮询 YouTube 视频对象来驱动一些屏幕动画。使用 flash API 这非常棒,因为我们可以以 40ms 间隔(25 FPS)轮询播放器并获得非常准确的当前播放器时间值。我们现在已经开始使用 iFrame API,不幸的是,它不允许任何接近该级别的准确性。我做了一些研究,似乎因为它是 iFrame,所以 postMessage 用于将播放器状态公开给 player.getCurrentTime() 调用。不幸的是,这个发布消息事件很少触发——有时低至每秒 4 次。更糟糕的是,消息触发的实际速率似乎取决于浏览器的呈现引擎。

有人知道是否可以强制渲染引擎更频繁地触发这些消息,以便轮询播放器可以实现更大的时间分辨率吗?我尝试了 requestAnimationFrame 并没有解决问题。有没有人成功地让 iFrame 播放器更准确、更频繁地报告时间?

最佳答案

我已经想出了解决我原来问题的方法。我写了一个简单的补间函数,它将以我想要的频率轮询 iFrame 播放器,并在两者之间插入时间瞬间。播放器本身仅每 250 毫秒左右更新一次当前时间,具体取决于渲染引擎和平台。如果您更频繁地轮询它,它将在几个连续的轮询中返回相同的当前时间值。但是,如果您应用一些逻辑,您可以检测到玩家何时返回新的当前时间并相应地更新您自己的计时器。我以 25 毫秒的间隔在定时器上运行下面的函数。在每次迭代中,我将当前时间增加 25 毫秒,除非我检测到玩家报告的当前时间发生变化。在那种情况下,我用新的“实际”当前时间更新我自己的计时器。当您执行此操作时,时间可能会有小跳跃或非线性,但如果您以足够高的速率轮询玩家,这应该是难以察觉的。

 window.setInterval(tween_time, 25);

function tween_time() {

time_update = (ytplayer.getCurrentTime()*1000)

playing=ytplayer.getPlayerState();

if (playing==1){

if (last_time_update == time_update)
{
current_time_msec += 25;
}

if (last_time_update != time_update)
{
current_time_msec = time_update;
}

}


do_my_animations();


last_time_update = time_update;

}

关于html - YouTube HTML5 API - 在轮询播放器当前时间时是否可以获得更好的时间分辨率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24190604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com