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

Поиск HTML5 на iPad

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

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

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

myPlayer.currentTime = XX;

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

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

myPlayer.networkState = 3
myPlayer.readyState = 4

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

myPlayer.networkState = 2
myPlayer.readyState = 3

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

Любая идея, почему это происходит?

Cheers, Andre

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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

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

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

Ответ 4

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

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.

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