2011-01-18 8 views
6

Sto provando a riprodurre filmati sul dispositivo Android dal nostro server. Non è un server multimediale, solo un normale server Apache. Utilizziamo la stessa API per accedere ai video su iPhone e funziona perfettamente.Impossibile riprodurre determinati video

Sul dispositivo Android, alcuni video funzionano e altri no. Sono stati tutti creati allo stesso modo, tranne che la maggior parte di quelli che non funzionano sono composti da immagini fisse e audio.

Abbiamo provato a ricodificarli con Videora e ho provato a suggerirli con MP4Box. Tutti i video funzionano perfettamente quando sono memorizzati sulla scheda SD. Abbiamo anche provato prima a scaricare il video dal server alla scheda SD, salvandolo come file e poi riproducendolo dal file, ma anche questo non funziona.

L'aiuto sarebbe fantastico. Sono molto confuso. Grazie.

Edit - 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 

UPDATE: Ecco un pastebin dell'analisi video per tre video diversi. I primi flussi sull'app dal server. Il secondo video non verrà riprodotto in streaming, ma può essere scaricato e riprodotto dal dispositivo. Il terzo non può essere né in streaming né scaricato per essere riprodotto. http://pastebin.com/9qChSkFz

WTF.

+0

Quale codifica ?? –

+0

Ho provato diversi tipi diversi dopo che non funzionava, ma in origine H.264. – Jai

+0

@Jai: utilizzare 'adb logcat', DDMS o la prospettiva DDMS in Eclipse per esaminare LogCat e vedere se si ricevono avvisi relativi alla riproduzione video. – CommonsWare

risposta

11

Ho incontrato lo stesso problema e, dopo aver inizialmente rinunciato, ho trovato una soluzione.

sono incappato la pagina seguente http://developer.android.com/guide/appendix/media-formats.html che afferma:

Per 3GPP e MPEG-4 contenitori, l'atomo moov deve precedere eventuali atomi MDAT, ma deve riuscire l'atomo ftyp.

Dopo aver scavato, ho scoperto che questo è esattamente il problema. Il video registrato da alcuni telefoni Android (credo pre 2.3) posiziona l'atomo moov alla fine del file. Questo li rende non riproducibili. Alcuni googling mostreranno che questo è un problema comune con i file MP4 e i lettori flash in particolare, dal momento che sono stati realizzati per lo streaming di video.

C'è anche un codice di errore specifico per questo in MediaPlayer (ma non ho visto questi registrati) MediaPlayer # MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK.

La mia soluzione è eseguire il file video tramite uno strumento esterno per spostare l'atomo di Moov all'inizio. Ho finito per usare MP4Box: http://gpac.wp.institut-telecom.fr/mp4box/ e il comando

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

Speranza che aiuta a qualcun altro!