2011-01-18 18 views
6

Estoy tratando de reproducir películas en el dispositivo Android desde nuestro servidor. No es un servidor de medios, solo un servidor Apache normal. Usamos la misma API para acceder a los videos en el iPhone y funciona bien.No se pueden reproducir ciertos videos

En el dispositivo Android, ciertos videos funcionan, y otros no. Todos fueron creados de la misma manera, excepto que la mayoría de los que no funcionan están compuestos por imágenes fijas y audio.

Hemos intentado volver a codificarlos con Videora, y hemos tratado de insinuarlos con MP4Box. Todos los videos se reproducen perfectamente bien cuando se almacenan en la tarjeta SD. También hemos intentado primero descargar el video del servidor a la tarjeta SD, guardarlo como un archivo y luego reproducirlo desde el archivo, pero esto tampoco funciona.

La ayuda sería increíble. Estoy masivamente confundido. Gracias.

Editar - Logcat:

01-19 08:19:12.669: DEBUG/MediaPlayer(1878): Couldn't open file on client side, trying server side 

01-19 08:19:14.119: INFO/ActivityManager(1172): Displayed activity com.myproject/.VideoClass: 1966 ms (total 1966 ms) 

01-19 08:19:15.779: ERROR/PlayerDriver(1071): Command PLAYER_INIT completed with an error or info UNKNOWN PVMFStatus 

01-19 08:19:15.789: ERROR/MediaPlayer(1878): error (200, -32) 

01-19 08:19:15.789: ERROR/MediaPlayer(1878): Error (200,-32) 

01-19 08:19:15.789: DEBUG/VideoView(1878): Error: 200,-32 

01-19 08:19:15.849: WARN/PlayerDriver(1071): PVMFInfoErrorHandlingComplete 

ACTUALIZACIÓN: Aquí un Pastebin del análisis de vídeo de tres vídeos diferentes. Las primeras transmisiones en la aplicación desde el servidor. El segundo video no se transmitirá, pero se puede descargar y reproducir desde el dispositivo. El tercero no se puede transmitir ni descargar para reproducir. http://pastebin.com/9qChSkFz

WTF.

+0

¿Qué codificación? –

+0

Probé varios diferentes después de que no funcionó, pero originalmente H.264. – Jai

+0

@Jai: use 'adb logcat', DDMS o la perspectiva DDMS en Eclipse para examinar LogCat y ver si recibe advertencias relacionadas con la reproducción de video. – CommonsWare

Respuesta

11

Me he encontrado con el mismo problema, y ​​después de darme por vencido inicialmente, encontré una solución.

I topamos con la siguiente página http://developer.android.com/guide/appendix/media-formats.html que establece:

Para 3GPP y MPEG-4 contenedores, el átomo moov debe preceder a cualquier átomo de mdat, pero debe tener éxito el átomo ftyp.

Después de hacer algunas excavaciones, descubrí que este es exactamente el problema. El video grabado desde ciertos teléfonos Android (creo que pre 2.3) coloca el átomo moov al final del archivo. Esto los hace inactivos. Algunos google le mostrarán que este es un problema común con los archivos MP4 y los reproductores flash en particular, ya que fueron creados para transmitir video.

Incluso hay un código de error específico para esto en MediaPlayer (pero no los vi registrados) MediaPlayer # MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK.

Mi solución es ejecutar el archivo de video a través de una herramienta externa para mover el átomo moov al inicio. Terminé usando MP4Box: http://gpac.wp.institut-telecom.fr/mp4box/ y el comando

MP4Box -inter 500 original.mp4 -out fixed.mp4 

la esperanza de que ayude a alguien más!

Cuestiones relacionadas