Поиск 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
Ответы
Ответ 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()"