2011-06-08 14 views
5

W mojej aplikacji muszę udostępnić użytkownikowi podgląd pobierania progresywnego (plik wideo).VideoView i pobieranie progresywne

Aby to osiągnąć, używam komponentu VideoView, aby wyświetlić zawartość pobieranego pliku wideo (.mp4, .3gpp).

Problem polega na tym, że nie mogę uzyskać dostępu do zdalnego nośnika poprzez protokół http:// lub rtsp://, więc jestem zmuszony użyć VideoView.setVideoPath do odtwarzania lokalnej kopii wideo podczas pobierania.

Niestety wydaje się, że na urządzeniach z Androidem, które nie mogą korzystać StageFright ramy (tak OpenCore i kilka Tegra2-based urządzeń w moim doświadczeniu), to VideoView nie może poprawnie obsługiwać progresywnego pobierania: może grać tylko część filmu uznanego podczas inicjowania komponentu.

Aby było jasne: jeśli użytkownik naciśnie "Odtwórz", gdy tylko 5% wideo zostanie pobrane, VideoView wyświetli tylko 5% wideo, bez względu na to, czy w międzyczasie pobrano więcej materiałów wideo.

Z mojego doświadczenia wynika, że ​​ten problem nie dotyczy urządzeń korzystających ze zrębu StageFright (np .: Nexus One 2.2, Nexus One 2.3.4).

Czy ktoś może wskazać mi możliwe rozwiązanie? Z góry dzięki

+0

Witam, czy znaleźć sposób, aby naprawić ten błąd? Miałem ten sam błąd. I właśnie teraz utknąłem. –

+0

W końcu dowiadujemy się, że powodem jest rozwiązanie. [Tutaj] (http://stackoverflow.com/questions/19587880/sorry-this-video-is-not-valid-for-streaming-to-this-device-in-http-streaming-an) Dzięki, –

Odpowiedz

1

VideoView jest klasą gotową do użycia w systemie Android Application Framework do obsługi odtwarzania wideo. Wewnętrznie używa klasy MediaPlayer do osiągnięcia odtwarzania. MediaPlayer korzysta z ram multimedialnych dostępnych wewnętrznie w oparciu o pewne kryteria, takie jak format pliku, pochodzenie treści itp.

Ograniczeniem jest więc podstawowa struktura, a nie VideoView. Jeśli nadal podejrzewasz VideoView, napisz własną aktywność odtwarzacza wideo za pomocą odtwarzacza multimedialnego. Zobaczysz ten sam wynik.

Również nie wszystkie wersje Androida (czytaj jako stagefright) obsługują pobieranie progresywne.

Możliwe, że możesz użyć klasy DownloadManager do pobierania treści z serwera http i podać ścieżkę do widoku odtwarzacz multimedialny/wideo, aby uzyskać szybki podgląd.

Shash316

+0

Tak, problem dotyczy różnych ram medialnych w ramach "MediaPlayer" (i tak w ramach "VideoView"). Pobieranie pliku wideo za pomocą 'DownloadManager' nie może zdziałać (już go używam), ponieważ problem jest związany ze sposobem obsługi bufora wideo przez podstawową strukturę medialną. Dzięki i tak. –

2

Jeśli próbujesz grać .h264, trzeba poruszać atomy MOV do przodu pliku. Mówią one kodekowi o długości filmu i innych rzeczach.

spróbować qtfaststart

http://ffmpeg.zeranoe.com/builds/

+0

Witaj, czy znalazłeś sposób na naprawienie tego błędu? Miałem ten sam błąd. I właśnie teraz utknąłem. Czy chcesz dać mi kilka sposobów na ukończenie tego zadania, przesyłanie strumieniowe wideo z progresywnym pobieraniem.p/s: mogę zakodować wideo do .h264, przesłać go na stronę internetową i uważam, że mój kod też jest dobry. Urządzenie: Samsung Galaxy 7 "2.2.1 –

Powiązane problemy