2010-10-22 4 views
7

Я создаю серию видеоуроков и хотел бы, чтобы пользователи не искали переходы и пропуски. Я буду использовать видеоплеер HTML5, который будет использоваться для настольных и iPad-браузеров. В идеале, мне бы хотелось, чтобы это работало и на iPhone, но я понимаю, что у вас нет контроля над видео на телефоне, так как он использует iPhone-плеер.Видеопроигрыватель HTML5 предотвращает поиск

Как я могу помешать пользователям искать вперед видеоплеер HTML5?

+2

* «запретить пользователям искать вперед» *: плохая идея, ИМО. Что делать, если пользователь смотрит наполовину, закрывает свой браузер, а затем хочет посмотреть вторую половину? S/Он будет вынужден снова смотреть первую часть. –

+0

Я намерен разместить контрольные точки по всему видео, которые будут сохранять прогресс пользователя в БД при воспроизведении видео. Если пользователь вернется на страницу, они начнут с последней контрольной точки. Видеоролики составят от 2 до 5 минут. Я понимаю, что удаление возможности поиска вперед не является хорошей идеей, хотя проект требует от пользователя просмотра всего видео до того, как они смогут перейти к следующему учебнику. Конечно, люди могут просматривать> источник и загружать его, но учебник должен научить их обязательному навыку, который является необходимым условием для следующего учебника. – jaysonp

+0

Ну, я могу придумать один пример, который заставит вас смотреть все видео - онлайн-курсы вождения .. они все время, даже если вы закончили читать текст или видео, они не позволят вам перейти к следующему разделу. Это отстой. Но они должны были следовать требованиям закона. – netrox

ответ

3

Если вы действительно хотите сделать это удивительно враждебным пользователям, то вы можете использовать атрибут controls. Вам нужно будет реализовать любые элементы управления, которые вы хотите разрешить с помощью JS.

Конечно, пользователь может всегда просто просмотреть источник, чтобы получить URI видео и загрузить его.

+0

Тот же вопрос с комментарием Касабланки выше. Это не полезный ответ. – Carnix

+0

Мертвая ссылка для этого ответа – Antoine

0

Я согласен с @Bart Kiers, что это не очень хорошая идея, но если вы это сделаете, я могу думать об одном способе: скрыть элементы управления и предоставить собственную кнопку воспроизведения, которая запускает видео с использованием JavaScript.

+3

Одно использование, о котором я могу думать, - это видеообъявление Pre-Rolls, рекламодателям не нравится платить за то, что вы можете пропустить. – SimonGates

+1

Он действительно не спрашивал, была ли это идея * хорошей *. Существует множество случаев использования, когда пользователь не может пропустить вперед. В частности, хорошим примером будет система CBT. -1 – Carnix

6

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

Я использую video.js. Я пытался использовать событие timechange, но он стреляет перед поиском. Таким образом, я прибегал к использованию интервала для захвата текущей позиции каждую секунду. Если позиция поиска больше текущей позиции, установите ее обратно. Прекрасно работает.

var player = null; 
var curpos = 0; 
videojs("player").ready(function(){ 
    player = this; 
}); 

player.on('seeking', function() { 
    var ct = player.currentTime(); 
if(ct > curpos) { 
    player.currentTime(curpos); 
} 
}); 

function getpos() { 
    curpos = player.currentTime(); 
} 
onesecond = setInterval('getpos()', 1000); 
+0

В самом конце, не уверен, что это вещь jQuery или нет, но мне пришлось заменить 'setInterval ('getpos()', 1000)' на 'setInterval (getpos, 1000)' для того, чтобы он работал. Отличный сниппет, спасибо! – jporcenaluk

1

Спасибо за ваш ответ Рик.

Я заметил, что пользователь может перетащить и удерживать искателя, который позволил им продолжить, поэтому я добавил, где не ищу функцию getPos.HTML 5 и jQuery.

var video = document.getElementsByTagName('video')[0]; 
 

 
function allowMove() { 
 
    $('input[id$="btnNext"]').removeAttr('disabled'); 
 
    $('input[id$="videoFlag"]').val("1"); 
 
} 
 

 
function getpos() { 
 
    if (!(video.seeking)) { 
 
    curpos = video.currentTime; 
 
    } 
 
    console.log(curpos) 
 
} 
 
onesecond = setInterval('getpos()', 1000); 
 

 
function setPos() { 
 
    var ct = video.currentTime; 
 
    if (ct > curpos) { 
 
    video.currentTime = curpos; 
 
    } 
 
}

6

Другой пример для Video.js:

videojs('example_video_1').ready(function(){ 
    var player = this; 
    var previousTime = 0; 
    var currentTime = 0; 
    var seekStart = null; 

    player.on('timeupdate', function(){ 
    previousTime = currentTime; 
    currentTime = player.currentTime(); 
    }); 

    player.on('seeking', function(){ 
    if(seekStart === null) { 
     seekStart = previousTime; 
    } 
    }); 

    player.on('seeked', function() { 
    if(currentTime > seekStart) { 
     player.currentTime(seekStart); 
    } 
    seekStart = null; 
    }); 
}); 
+0

Работает отлично! – Tomjr260

0

Почему это не так?

var video = document.getElementById("myVideo"); 
var counter = 0; 

video.on('timeupdate', function() { 
    if (video[0].paused == false) { 
    counter = video[0].currentTime; 
    } 
} 

video.on('seeking', function(e) { 
    if (parseInt(counter, 10) != parseInt(video[0].currentTime, 10)) { 
    video[0].currentTime = counter; 
    } 
}); 
Смежные вопросы