【问题标题】:jwplayer: how to disable seek on not viewed part of video?jwplayer:如何在未观看的视频部分禁用搜索?
【发布时间】:2021-11-12 21:09:32
【问题描述】:

我正在使用 jwplayer 6.8.4616。我不希望用户去寻找他没有看过的视频部分,允许寻找已经看过的部分,但找不到好的解决方案。

我在 google chrome 39.0.2171.71 + ubuntu 14.04 中尝试过JWPlayer Prevent SKipping forward unless already watched。除非我在该解决方案中将超时值设置为至少 1500 毫秒,否则它对我不起作用,但如果超时时间太长,它就会变得可见。

如果不通过javascript,可以使用自定义皮肤或插件来完成。如果不在我的版本中,可以在更高版本的 jwplayer 中完成吗?

编辑:上述方法适用于 MP4 视频,但不适用于 HLS 流。

【问题讨论】:

  • 上面的代码有效。
  • 我试图在一个页面中设置以在vplayer.mindtickle.com/index.php 显示演示,但由于某种未知原因,它没有注册回调并给出警告“无法添加内部侦听器”。但在我的实际应用中,只有当我保持超时超过 1500 时,上述方法才有效
  • 我会将其简化为更简单的嵌入。见下文。

标签: jwplayer jwplayer6


【解决方案1】:

有一种不同的方法,取自 https://github.com/jwplayer/jwplayer/issues/977,它包括覆盖 jwPlayer 的 seek 方法。 这样,您无需等待搜索完成然后“倒带”,而是完全避免搜索。

var player = jwplayer('container').setup({ file: 'video.mp4'});
player.on('ready', function() {
  const originalSeek= player.seek;
  player.seek= (newPos) => {
    if (someCheckIsValid(newPos)){
      originalSeek(newPos);
    } else {
     console.warn('sorry, you cant seek to that position');
    }
  }
}

【讨论】:

  • 但它在 IE 11 上不起作用。我不知道为什么它不起作用。它正在 safari、chrome 上运行
  • 呃,不知道为什么。如果您找到解决方法,请在此处发布以供未来的 SO 用户使用
【解决方案2】:

对于初学者来说,试试这个更简单的嵌入:

<!DOCTYPE html>
<html>
<head>
  <title>Disable Seek</title>
    <script type='text/javascript' src='https://cdn.jwplayer.com/libraries/Jq6HIbgz.js'></script>
  <style type="text/css">
    body { margin: 0; padding: 0 }
  </style>
</head>
<body>
<div id="thePlayer"></div>
<script type="text/javascript">
jwplayer("thePlayer").setup({
    image: "http://content.bitsontherun.com/thumbs/w5co0c24-480.jpg",
    file: "http://content.bitsontherun.com/videos/w5co0c24-hV866gPy.mp4"
});
var maxPlayPosition = 0;
var seeking = false;
jwplayer().on("time", function (event) {
    if (!seeking) maxPlayPosition = Math.max(event.position, maxPlayPosition)
}).on("playlistItem", function () {
    maxPlayPosition = 0
}).on("seek", function (event) {
    if (!seeking) {
        if (event.offset > maxPlayPosition) {
            seeking = true;
            setTimeout(function () {
                jwplayer().seek(maxPlayPosition)
            }, 100)
        }
    } else seeking = false
});
</script>
</body>
</html>

【讨论】:

  • 我在vplayer.mindtickle.com/b.html 托管了相同的示例,并可选择多个来源。它适用于给定的 mp4 源,但不适用于 hls 流。如果超时增加到 2500,则适用于 hls
  • 这是有道理的,就此而言,这不是用 HLS 或任何其他流协议测试的。
  • 感谢您的意见。我已经测试过,它适用于 6.11 版本,而不是 6.8
  • 您在此代码中使用的回调不再存在。请参阅此处以获取阻止查找无缓冲部分的代码的更新版本:github.com/slhck/web-player-demos/commit/…
猜你喜欢
  • 1970-01-01
  • 2020-05-28
  • 1970-01-01
  • 1970-01-01
  • 2020-07-17
  • 1970-01-01
  • 1970-01-01
  • 2014-06-14
  • 2012-08-07
相关资源
最近更新 更多