Поиск HTML5 видео на iPad - PullRequest
       18

Поиск HTML5 видео на iPad

19 голосов
/ 22 сентября 2010

У меня есть видеоплеер HTML5 с настраиваемой панелью поиска, которая отлично работает на iPhone (в режиме реального времени) и в браузере.

Он отлично работает и на iPad, а панель поиска обновляется какфильм воспроизводится, но по какой-то причине я не могу искать.

Все значения верны, и я пытаюсь установить:

myPlayer.currentTime = XX;

К сожалению, iPad отказываетсяустановите атрибут .currentTime.

Из того, что я могу собрать разница между браузером и iPad заключается в том, что в браузере, который я получаю:

myPlayer.networkState = 3
myPlayer.readyState = 4

На iPad я получаю:

myPlayer.networkState = 2
myPlayer.readyState = 3

Это точно такой же код, запускающий локальное видео MP4.

Есть идеи, почему это происходит?

Ура, Андре

Ответы [ 4 ]

6 голосов
/ 01 октября 2010

У меня были всевозможные проблемы с получением JavaScript для управления аудиоэлементами, а также большое разочарование по поводу свойства currentTime, а также ограничения Apple в отношении того, что представляет собой прямое инициирование пользователем событий.

Меня не удивило бы, если бы на iPad была какая-то странная ошибка с воспроизведением видео JavaScript и HTML5 (или «недокументированная» функция), которая требует обходного пути. Исходя из моего опыта, у iPad есть уникальный способ ведения дел, отличный от официального документа.

Вы должны проверить error , buffered , seekable и seek свойства видеоэлемента. Глядя на ваши значения readyState и networkState, iPad, похоже, считает, что видео загружено не полностью - что странно для локального ресурса.

с буферизацией и с возможностью поиска должны быть равны временному диапазону всего вашего видео. поиск должен быть ИСТИННЫМ. Это должно как минимум дать вам немного больше информации о проблеме.

Вы проверяли это с другими видео? может быть причиной того, что есть какая-то проблема кодирования видео, с которой у iPad проблема.

Кроме этого - в предыдущей версии iPad OS была ошибка, которая не позволяла установить свойство currentTime. Вы используете последнюю версию ОС?

5 голосов
/ 29 марта 2011

Эта проблема связана со значением, используемым в свойстве video.currentTime. В моем конкретном случае я устранил проблему, всегда следя за тем, чтобы при поиске я использовал числа с плавающей запятой с 1 десятичной цифрой .

Установка video.currentTime в ZERO на iOS 3.2 действительно будет искать видео в начале, но значение не будет обновляться после этого - событие timeupdate все еще отправляется нормально, но если вы попытаетесь прочитать currentTime, оно всегда будет вернуть то же значение.

Для поиска начала видео используйте 0.1 вместо 0, для поиска 12.2345 используйте 12.2.

PS: вы можете использовать (+(12.2345).toFixed(1)), чтобы ограничить количество десятичных цифр до 1.

2 голосов
/ 16 июня 2011

Хороший ответ Кайла. Я бы добавил, что вы не можете предполагать, что атрибут seekable заполнен после какого-либо конкретного события . Это означает, что вы не можете ждать таких событий, как loadedmetadata, canplay или любых других, и предполагать, что вы можете безопасно установить currentTime в этот момент.

Кажется, самый безопасный способ сделать это - проверять seekable после каждого события, связанного с видео, и, если оно охватывает время, которое вы хотите искать, установите currentTime в этой точке. На iPad seekable может быть заполнено только после события canplaythrough, что довольно поздно.

Подробнее об этом см. в моем блоге .

0 голосов
/ 05 октября 2010

У меня та же проблема - вот свойства в моем случае:

UIWebView - iPad Simulator
duration=4.861666679382324
startTime=0
currentTime=4.861666679382324
buffered(1)=[0-0]
seekable(0)=
seeking=false
error=null
readystate=4
networkstate=3

Chrome:
duration=4.9226298332214355
startTime=0
currentTime=4.9226298332214355
buffered(1)=[0-4.9226298332214355]
seekable(1)=[0-4.9226298332214355]
seeking=false
error=null
readystate=4
networkstate=1

так что - ничего не буферизуется и ничего не ищется. я играю локальный клип из каталога ресурсов комплекта iPad через UIWebView.

В моем случае все, что мне нужно, это сбросить видео в начало после каждого воспроизведения, и я смог выполнить это с помощью вызова «load ()»

...