Android video.duration не загружается, пока video.play () - PullRequest
6 голосов
/ 27 марта 2012

У меня есть видео html5, которое я пытаюсь настроить обратные вызовы через определенные промежутки времени во время воспроизведения.Видео начинает воспроизводиться из JavaScript с video.play().Прямо сейчас мой код прослушивает событие 'loadedmetadata', затем запрашивает продолжительность и устанавливает эти обратные вызовы.Прекрасно работает на мобильном сафари, но не на Android (2.3.4 и 2.3.7).

На Android 'loadedmetadata', похоже, испускается до того, как продолжительность действительно станет доступной.Чтобы проверить это, я записал продолжительность в каждом шаге процесса загрузки в своем коде, чтобы увидеть, где он действительно может быть прочитан.До video.play() и после одного события 'timeupdate' свойство video.duration равно 6000 независимо от используемого видео.Я проверил это с помощью файла mp4 и файла 3gp.Как только эти условия будут выполнены, фактическая продолжительность доступна.

Я нашел этот пост с похожими проблемами [1].Ответ, получивший наибольшее количество голосов, который не был принят, - это то, как я изначально это настроил, и он отлично работает на iOS.Принятый ответ также не работает, и предполагает, что это проблема webkit.Я регистрирую свойство video.readyState и вижу, что до начала воспроизведения видео '4', но продолжительность все еще недоступна, пока не начнется воспроизведение, и не произойдет первое событие 'timeupdate'.

Наш текущий обходной путь - запрос значения video.duration и настройка обратных вызовов событий только при video.duration !== 6000.Это довольно уродливо, и я хотел бы докопаться до сути, чтобы этот хак не вернулся к укусам.Обсуждение здесь [2], по-видимому, предполагает, что проблема может быть связана с кодированием.То есть, не закодированный должным образом, Android не читает метаданные правильно, пока файл не загружен, или, возможно, вообще, и он рассчитывает продолжительность другим способом.

Есть ли что-нибудь, что я могу сделать, чтобы сделать это чище, или я пока застрял с хаком?

[1] Не удалось получить продолжительность видео HTML5

[2] http://www.broken -links.com / 2010/07/08 / making-html5-video-work-on-and-phone /

1 Ответ

0 голосов
/ 17 июля 2013

Id использует setTimeout, который вызывает функцию, чтобы проверить, доступна ли длительность рекурсивно.

Таким образом, функция может, как только любая информация становится доступной, отображать и т. Д. Длительность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...