Подтвердить что ты не робот

Дождитесь загрузки видео в формате HTML5

У меня есть тег видео, что я динамически меняю его источник, поскольку я позволяю пользователю выбирать из нескольких видео из базы данных. Проблема в том, что когда я изменяю атрибут src, видео не загружается, даже если я ему говорю.

Вот мой код:

$("#video").attr('src', 'my_video_'+value+'.ogg');
$("#video").load();
while($("#video").readyState !== 4) {
        console.log("Video is not ready");
};

Код остается в бесконечном цикле.

Любая помощь?

ИЗМЕНИТЬ

Яну Девлину:

//add an listener on loaded metadata
v.addEventListener('loadeddata', function() {
    console.log("Loaded the video data!");
    console.log("Video Source: "+ $('#video').attr('src'));
    console.log("Video Duration: "+ $('#video').duration);
}, false);

Хорошо, это код, который у меня есть. Источник отлично печатает, но я до сих пор не могу получить продолжительность:/

4b9b3361

Ответ 1

Вам не нужен jQuery для этого, поскольку есть Media API, который предоставляет вам все, что вам нужно.

var video = document.getElementById('myVideo');
video.src = 'my_video_' + value + '.ogg';
video.load();

В Media API также содержится метод load(), который: "Вызывает элемент reset и начинает выбор и загрузку нового носителя ресурс с нуля".

(Ogg не лучший формат для использования, поскольку он поддерживается только ограниченным количеством браузеров. Я бы предложил использовать WebM и MP4 для охвата всех основных браузеров - вы можете использовать canPlayType(), чтобы решить, какой из них будет играть).

Вы можете подождать либо loadedmetadata, либо loadeddata (в зависимости от того, что вы хотите):

video.addEventListener('loadeddata', function() {
   // Video is loaded and can be played
}, false);

Ответ 2

В ответ на заключительную часть вашего вопроса, которая до сих пор остается без ответа... Когда вы пишете $('#video').duration, вы запрашиваете свойство duration объекта коллекции jQuery, которого не существует. Нативный элемент видео DOM имеет продолжительность. Вы можете получить это несколькими способами.

Здесь один:

// get the native element directly
document.getElementById('video').duration

Здесь другое:

// get it out of the jQuery object
$('#video').get(0).duration

И еще:

// use the event object
v.bind('loadeddata', function(e) {
  console.log(e.target.duration);
});

Ответ 3

функция вызова при загрузке:

<video onload="doWhatYouNeedTo()" src="demo.mp4" id="video">

получить продолжительность видео

var video = document.getElementById("video");
var duration = video.duration;