Я работаю над созданием видеоплеера HTML5 с пользовательским интерфейсом, но у меня возникают некоторые проблемы с отображением информации о продолжительности видео.
Мой HTML прост:
<video id="video" poster="image.jpg" controls>
<source src="video_path.mp4" type="video/mp4" />
<source src="video_path.ogv" type="video/ogg" />
</video>
<ul class="controls">
<li class="time"><p><span id="timer">0</span> of <span id="duration">0</span></p></li>
</ul>
И я использую JavaScript, чтобы получить и вставить продолжительность
var duration = $('#duration').get(0);
var vid_duration = Math.round(video.duration);
duration.firstChild.nodeValue = vid_duration;
Проблема в том, что ничего не происходит. Я знаю, что видеофайл содержит данные о продолжительности, потому что, если я просто использую элементы управления по умолчанию, он отображается нормально.
Но по-настоящему странно, если я добавлю в свой код alert (duration) следующим образом:
alert(duration);
var vid_duration = Math.round(video.duration);
duration.firstChild.nodeValue = vid_duration;
тогда все работает нормально (без всплывающего предупреждения) Есть идеи, что здесь происходит или как я могу это исправить?
ОБНОВЛЕНИЕ: Хорошо, поэтому, хотя я точно не решил эту проблему, но я нашел способ обойти это, решивший мою самую большую проблему... пользовательский опыт.
Сначала видео не начинает загружаться до тех пор, пока зритель не нажмет кнопку воспроизведения, поэтому я предполагаю, что информация о продолжительности была недоступна для извлечения (я не знаю, как исправить эту конкретную проблему... хотя я предполагаю, что для этого потребуется просто загрузить метаданные видео отдельно от видео, но я даже не знаю, возможно ли это).
Поэтому, чтобы обойти факт отсутствия данных о продолжительности, я решил полностью скрыть информацию о продолжительности (и фактически весь элемент управления) до тех пор, пока вы не нажмете на игру.
Тем не менее, если кто-то знает, как загрузить метаданные видео отдельно от видеофайла, пожалуйста, поделитесь. Я думаю, что это должно полностью решить эту проблему.