jwplayer: как отключить поиск непросматриваемой части видео?

Я использую jwplayer 6.8.4616. Я не хочу, чтобы пользователи искали часть видео, которую он еще не смотрел, позволяя искать ту часть, которую уже смотрели, но не находя хорошего решения.

Я пробовал JWPlayer Предотвратить SKipping вперед, если он еще не просмотрен в google chrome 39.0 .2171.71 + убунту 14.04. У меня это не работает, если я не установлю значение тайм-аута не менее 1500 мс в этом решении, но если тайм-аут слишком длинный, он становится видимым.

если не через javascript, можно ли это сделать с помощью пользовательских скинов или плагинов. можно ли это сделать в более высокой версии jwplayer, если не в моей версии?

РЕДАКТИРОВАТЬ: вышеприведенный подход работает для видео MP4, но не для потоков HLS.


person hridayesh    schedule 10.12.2014    source источник
comment
Код выше там работает.   -  person emaxsaun    schedule 10.12.2014
comment
Я пытался настроить страницу для показа демонстрации по адресу vplayer.mindtickle.com/index.php По какой-то неизвестной причине он не регистрирует обратные вызовы и выдает предупреждение. Не удалось добавить внутреннего прослушивателя. но в моем реальном приложении вышеизложенное работает только тогда, когда я сохраняю тайм-аут более 1500   -  person hridayesh    schedule 10.12.2014
comment
Я бы разделил это на более простую вставку. Смотри ниже.   -  person emaxsaun    schedule 11.12.2014


Ответы (2)


Попробуйте эту более простую вставку для начала:

<!DOCTYPE html>
<html>
<head>
    <title>Disable Seek</title>
    <script type='text/javascript' src='http://p.jwpcdn.com/6/8/jwplayer.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().onTime(function (event) {
    if (!seeking) maxPlayPosition = Math.max(event.position, maxPlayPosition)
}).onPlaylistItem(function () {
    maxPlayPosition = 0
}).onSeek(function (event) {
    if (!seeking) {
        if (event.offset > maxPlayPosition) {
            seeking = true;
            setTimeout(function () {
                jwplayer().seek(maxPlayPosition)
            }, 100)
        }
    } else seeking = false
});
</script>
</body>
</html>
person emaxsaun    schedule 10.12.2014
comment
Я разместил тот же пример на vplayer.mindtickle.com/b.html с возможностью выбора нескольких источники. Он хорошо работает для данного источника mp4, но не работает для потока hls. Работает для hls, если таймаут увеличен до 2500 - person hridayesh; 11.12.2014
comment
В этом есть смысл, это не тестировалось с HLS или любым другим потоковым протоколом, если уж на то пошло. - person emaxsaun; 11.12.2014
comment
Спасибо за отзыв. Я тестировал, и он работает с версией 6.11, а не с 6.8. - person hridayesh; 12.12.2014

Существует другой подход, взятый из https://github.com/jwplayer/jwplayer/issues/977, которые заключаются в переопределении метода seek jwPlayer. Таким образом, вместо того, чтобы ждать завершения поиска, а затем «перематывать назад», вы вообще избегаете поиска.

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');
    }
  }
}
person rafahoro    schedule 03.07.2018
comment
Но это не работает в IE 11. Я не знаю, почему это не работает. Работает в сафари, хром - person Prosenjit Manna; 26.07.2018
comment
эм, не знаю почему. Если вы найдете обходной путь, напишите здесь для будущих пользователей SO - person rafahoro; 29.07.2018