2010-09-22 3 views
18

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

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

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

myPlayer.currentTime = XX; 

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

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

myPlayer.networkState = 3 
myPlayer.readyState = 4 

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

myPlayer.networkState = 2 
myPlayer.readyState = 3 

Это точно такой же код, что и локальный MP4-видео.

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

Приветствия, Andre

+0

Не могли бы вы отправить код, устанавливающий текущее время. Я могу сделать это без особых трудностей. –

+0

Здесь: videoPlayerElement.currentTime = x * videoPlayerElement.duration/scrubberBg.width(); ... это работает в браузере (несколько из них) и на iPad, значение отслеживается нормально, bu свойство не установлено. Я бегу 3.2 – Andre

+1

Я обнаружил, что установка 'video.currentTime' на iOS кажется заслоной за действием пользователя. Выдача 'alert()' или события касания перед установкой 'currentTime', кажется, обеспечивает правильный ответ - за исключением, конечно, для взаимодействия пользователя, которое требуется. – eug

ответ

6

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

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

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

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

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

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

+0

Я использую 3.2 (потому что я не могу ограничить его до последней), и я пробовал другой источник видео с той же проблемой:/ – Andre

0

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

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.

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

5

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

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

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

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

+0

У меня такая же проблема и вы пытались округлить, как описано выше, но это не так, t, похоже, работает на IOS 6.1. – mzedeler

1

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

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

Подробнее об этом см. В my blog post.