У меня есть видео html5, в котором я пытаюсь настроить обратные вызовы через определенные промежутки времени во время воспроизведения. Видео начинает воспроизводиться из javascript с video.play()
. Прямо сейчас мой код прослушивает событие 'loadedmetadata'
, затем запрашивает продолжительность и устанавливает эти обратные вызовы. Отлично работает на мобильном сафари, но не на Android (2.3.4 и 2.3.7).
На Android 'loadedmetadata'
, кажется, испускается до того, как продолжительность действительно доступна. Чтобы проверить это, я записал продолжительность каждого шага процесса загрузки в своем коде, чтобы увидеть, где ее можно прочитать. До video.play()
и после одного события 'timeupdate'
свойство video.duration
равно 6000, независимо от используемого видео. Я проверил это с файлом mp4 и файлом 3gp. После выполнения этих условий становится доступна фактическая продолжительность.
Я нашел этот другой пост с похожими проблемами [1]. Ответ с наибольшим количеством голосов, который не был принят, - это то, как я изначально настроил это, и он отлично работает на iOS. Принятый ответ также не работает и предполагает, что это проблема вебкита. Я регистрирую свойство video.readyState
и вижу, что оно равно '4'
до того, как видео начнет воспроизводиться, но продолжительность по-прежнему недоступна до тех пор, пока оно не начнет воспроизводиться, и первое событие 'timeupdate'
.
Наш текущий обходной путь — запрашивать значение video.duration
и настраивать обратные вызовы событий только тогда, когда video.duration !== 6000
. Это довольно уродливо, и я хотел бы добраться до сути, чтобы этот хак не вернулся к укусу. Обсуждение здесь [2], по-видимому, предполагает, что проблема может быть связана с кодировкой. То есть, не закодированный должным образом, андроид не читает метаданные правильно, пока файл не будет загружен, или, возможно, вообще, и он вычисляет продолжительность другим способом.
Есть ли что-нибудь, что я могу сделать, чтобы сделать это чище, или я пока застрял с хаком?
[1] Проблема с получением продолжительности видео HTML5
[2] http://www.broken-links.com/2010/07/08/making-html5-video-work-on-android-phones/
v.addEventListener('durationchange', repos, false);
для отслеживания изменений, но да... похоже, что это проблема WebView/Video во многих сборках Android. - person Offbeatmammal   schedule 11.03.2013