【问题标题】:Inconsistent HTMLMediaElement durationHTMLMediaElement 持续时间不一致
【发布时间】: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


【解决方案1】:

我遇到了完全相同的问题,但有一个音频元素。在寻找音频的终点时,durationchange 事件不断触发,audio.duration 不断变化几秒钟。

原来是音频源的问题。这是有问题的音频的小提琴:https://jsfiddle.net/jessuni/kxcmye8z/42/ 您是否尝试过其他视频源并重现该问题?

【讨论】:

    猜你喜欢
    • 2013-07-02
    • 2020-09-24
    • 2018-05-06
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多