2010-09-22 9 views
18

Tengo un reproductor de video HTML5 con una barra de búsqueda personalizada, que funciona muy bien en el iPhone (en línea) y en el navegador.Búsqueda de video HTML5 en el iPad

También funciona muy bien en el iPad y la barra de búsqueda se actualiza a medida que se reproduce la película, pero por alguna razón, no puedo buscar.

Todos los valores son correctos y estoy tratando de establecer:

myPlayer.currentTime = XX; 

Por desgracia, el iPad se niega a establecer el atributo .currentTime.

De lo que he entendido la diferencia entre el navegador y el iPad es que en el navegador me sale:

myPlayer.networkState = 3 
myPlayer.readyState = 4 

En el IPAD me sale:

myPlayer.networkState = 2 
myPlayer.readyState = 3 

Es exactamente el mismo código, ejecutando un video MP4 local.

¿Alguna idea de por qué sucede esto?

Saludos, Andre

+0

Podría publicar el código que se ajuste de la hora actual. Puedo hacer esto sin mucha dificultad. –

+0

Aquí: videoPlayerElement.currentTime = x * videoPlayerElement.duration/scrubberBg.width(); ... esto funciona en el navegador (varios de ellos) y en el iPad, el valor sale bien, pero la propiedad no está configurada. Estoy ejecutando 3.2 – Andre

+1

He encontrado que la configuración 'video.currentTime' en iOS parece estar cerrada detrás de una acción del usuario. La emisión de un 'alerta()' o un evento táctil antes de configurar el 'currentTime' parece proporcionar la respuesta correcta, excepto por supuesto para la interacción del usuario que requiere. – eug

Respuesta

6

he tenido todo tipo de problemas para conseguir JavaScript para controlar los elementos de audio, y una gran cantidad de frustración con la propiedad horaActual, junto con las restricciones de Apple sobre lo que constituye la iniciación usuario directo de los acontecimientos.

No me sorprendería si había algún tipo de insecto raro con JavaScript & HTML5 reproducción de vídeo en el iPad (o "característica" que es indocumentado), lo que requiere una solución. Desde mi experiencia, el iPad tiene una manera única de hacer las cosas que lo que figura en la documentación oficial.

usted debe comprobar el error , tamponada, reubicable, y la búsqueda de propiedades del elemento de vídeo. En cuanto a los valores de stateState & networkState, el iPad parece pensar que el video no se ha cargado por completo, lo que es extraño para un recurso local.

tamponada y reubicable debe ser igual al intervalo de tiempo de todo el vídeo. la búsqueda debe ser VERDADERA. Eso debería al menos darle un poco más de información sobre el problema.

¿Lo ha probado con otros videos? Es podría ser que hay algún tipo de problema de codificación con el video que el iPad tiene un problema.

Aparte de eso, hubo un error en una versión anterior del sistema operativo del iPad que rompió la capacidad de establecer la propiedad currentTime. ¿Estás usando la última versión del sistema operativo?

+0

Estoy usando 3.2 (porque no puedo limitarlo a lo último) y he intentado con una fuente de video diferente, con el mismo problema:/ – Andre

0

estoy teniendo el mismo problema - aquí son las propiedades en mi caso:

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 

así - nada se está amortiguada y nada es reubicable. Estoy reproduciendo un clip local desde el directorio de recursos de un paquete de iPad a través de UIWebView.

En mi caso, todo lo que necesito es para restablecer a la parte superior del vídeo después de cada juego, y yo era capaz de lograr esto a través de una llamada a la "carga()"

5

Este problema está relacionado con el valor utilizado en la propiedad video.currentTime. En mi caso específico He arreglado el problema siempre asegurándose de que estaba usando números de punto flotante con dígitos decimales 1 durante la búsqueda.

Configuración video.currentTime a CERO en iOS 3.2 será de hecho buscar el vídeo al principio, pero el valor no se actualizará después de eso - timeupdate caso aún se envía normalmente, pero si se intenta leer currentTime siempre devolverá el mismo valor.

para buscar el comenzar de la utilización de vídeo en lugar de 0.10, a buscar a 12.2345 uso 12.2.

PS: se puede usar (+(12.2345).toFixed(1)) para limitar el número de dígitos decimales a 1.

+0

Tengo el mismo problema y he intentado redondearlo como se indicó anteriormente, pero no funciona Parece que funciona en IOS 6.1. – mzedeler

1

respuesta de Kyle es una buena. Yo añadiría, no se puede asumir el atributo seekable se rellena después de cualquier evento en particular. Esto significa que no puede esperar a eventos como loadedmetadata, canplay, o cualquier otro y asumir que usted es capaz de establecer con seguridad currentTime en ese punto.

Parece que la forma más segura de hacerlo es comprobar seekable después de cada evento relacionado con el video, y si abarca el tiempo que desea buscar, establezca currentTime en ese punto. En iPad, seekable no se puede llenar hasta después del evento canplaythrough, que es bastante tarde.

Consulte my blog post para obtener más información al respecto.