【发布时间】:2019-04-05 21:01:58
【问题描述】:
我的视频播放器出现问题,从 HTMLMediaElement.duration 返回的视频时长不一致。我设置了以下监听器来帮助说明:
video.addEventListener('timeupdate', function(e) {
console.log('Duration: ' + video.duration);
if ( video.currentTime === video.duration ) {
console.log( video.currentTime + ' === ' + video.duration )
}
});
当我一直搜索到视频结尾时,此事件会返回一个不同(更准确)的值。我将在下面提供我的日志示例:
Duration: NaN
Duration: 135.8357
Duration: 135.8357
Duration: 135.8357
Duration: 135.8357
Duration: 135.8357
Duration: 135.8357
...
..我寻找到视频的结尾..
...
Duration: 135.8357
135.8357 === 135.8357
Duration: 135.952833
我一直寻找到视频的结尾,当前时间等于时长,然后时长更新到不同的时间。一直搜索到视频结尾不会触发ended 事件(除非视频继续播放并到达135.952833 的新终点)。
是否有人对此问题有任何见解或对可能的解决方案有想法?
【问题讨论】:
-
我猜这是否正确,这取决于您使用的容器/编解码器,它在 chrome 和 firefox 中也不同?你知道剪辑中的音频和视频的长度是否完全相同?
-
@Harry 在音轨上的好点子。事实上,如果您阅读规范文本duration-change-algorithm,您会发现这与多个 sourceBuffers 有关。
-
不错的发现,但这仅意味着允许元素在发现需要时更改持续时间。我猜音频和视频在您的剪辑中的持续时间不同,但我认为它们不会显示 120 毫秒的差异(差异通常应该小于一个视频帧持续时间)。您能否分享一个非常简短的示例剪辑,并用您对这个剪辑的结果更新您的问题? Edit 实际上 135 秒已经足够短了,也许你可以分享你得到这些结果的剪辑......
-
@KGraber 你能分享视频吗?如果没有容器/编解码器,很难说,但我实际上也遇到了并向 Chromium 报告了一个错误,在 mp4 的情况下,由于使用了旧的 ffmpeg 分支,时间戳无法正确计算。
标签: javascript video html5-video dom-events hls.js