3

我使用mediaelement.js组件仅显示部分视频。
我已经在timeupdate事件上设置了一个监听器,并且每次视频正在播放一个片段时,我都希望使用setCurrentTime()跳过它跳到下一个片段。但是,下次调用timeupdate事件时,时间与设置的时间不同(在设置时间前几秒钟)。这是我的代码:

var curr = t.media.getCurrentTime();
if (curr < segments[i][0]) {
  console.debug(curr.toFixed(1)+' jumping to '+segments[i][0]+' in segment '+i+'      ['+segments[i][0]+','+segments[i][1]+']');
  t.media.setCurrentTime(segments[i][0]);
  return;
}

当我在执行代码后记录当前时间时,它显示当前时间已正确更新(例如到 19)但是当下次调用事件时当前时间错误(15.3)。
它只发生在 firefox 上,当回到 flash 时,在 chrome 中它似乎可以工作。
有任何想法吗?

4

1 回答 1

3

问题在于闪存回退。显然,flash 的 h.264 格式存在问题并跳到特定时间。Flash 只能跳转到 H.264 格式视频中的关键帧,因此当媒体元素跳转到某个帧时,Flash 播放器会跳转到最近的关键帧。
可以通过每隔几帧设置一个关键帧(例如通过使用 ffmpeg -g 标志)来解决该问题,但更好的解决方案是将视频保持为另一种格式以用于 Flash 后备。

于 2012-06-03T06:59:55.640 回答