2011-01-18 18 views
6

Próbuję odtwarzać filmy na urządzeniu z systemem Android z naszego serwera. To nie jest serwer mediów, tylko zwykły serwer Apache. Używamy tego samego API, aby uzyskać dostęp do filmów na iPhone i działa dobrze.Nie można odtwarzać niektórych filmów wideo

Na urządzeniu z Androidem niektóre filmy działają, a inne nie. Wszystkie zostały stworzone w ten sam sposób, z tym że większość tych, które nie działają, składa się ze zdjęć i dźwięku.

Próbowaliśmy ponownie kodować je za pomocą Videory i próbowaliśmy zasugerować je za pomocą MP4Box. Wszystkie filmy odtwarzają się doskonale, gdy są zapisane na karcie SD. Próbowaliśmy także najpierw pobrać film z serwera na kartę SD, zapisując go jako plik, a następnie odtwarzając go z pliku, ale to też nie działa.

Pomoc byłaby niesamowita. Jestem bardzo zdezorientowany. Dzięki.

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: Tutaj wklejarka analizy wideo dla trzech różnych filmów. Pierwsze strumienie w aplikacji z serwera. Drugi film wideo nie będzie przesyłany strumieniowo, ale można go pobrać, a następnie odtworzyć z niego. Trzeci nie może być przesyłany strumieniowo ani pobierany do odtwarzania. http://pastebin.com/9qChSkFz

WTF.

+0

Jakie kodowanie? –

+0

Wypróbowałem kilka różnych po tym, jak to nie zadziałało, ale pierwotnie H.264. – Jai

+0

@Jai: Użyj 'adb logcat', DDMS lub perspektywy DDMS w Eclipse, aby zbadać LogCat i sprawdzić, czy otrzymujesz ostrzeżenia związane z odtwarzaniem wideo. – CommonsWare

Odpowiedz

11

Wpadłem na ten sam problem i po początkowym poddaniu się, znalazłem rozwiązanie.

natknąłem się na następnej stronie http://developer.android.com/guide/appendix/media-formats.html który stwierdza:

Dla 3GPP i MPEG-4 pojemników, atom Moov musi poprzedzać jakiekolwiek atomy MDAT, ale musi odnieść sukces atom ftyp.

Po wykonaniu kopania dowiedziałem się, że to jest dokładnie problem. Wideo nagrane z niektórych telefonów z systemem Android (myślę, że przed 2.3) umieszcza atom moov na końcu pliku. To sprawia, że ​​nie można ich przesyłać strumieniowo. Niektóre osoby używające google pokazują, że jest to typowy problem z plikami MP4 i odtwarzaczami flash, ponieważ zostały stworzone do streamowania wideo.

Istnieje nawet specjalny kod błędu dla tego w MediaPlayer (ale nie widziałem tych zarejestrowanych) MediaPlayer # MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK.

Moje rozwiązanie polega na uruchomieniu pliku wideo za pomocą zewnętrznego narzędzia, aby przenieść atom moov na początek. I skończył przy użyciu MP4Box: http://gpac.wp.institut-telecom.fr/mp4box/ i polecenia

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

nadzieję, że pomoże ktoś inny!