2012-10-28 13 views
6

To pytanie zostało zadane wcześniej, ale teraz, w nowszych wersjach Androida (do Jelly Bean), zastanawiałem się, czy nastąpiły jakieś postępy w pobieraniu i przesyłaniu strumieniowym plików w o tym samym czasie. Z API, to nie wygląda to naturalnie możliwe, ponieważ są one dostępne metody setDataSource:Android MediaPlayer - Pobieranie i przesyłanie strumieniowe w tym samym czasie ponownie odwiedzane

void setDataSource(String path) 
Sets the data source (file-path or http/rtsp URL) to use. 
void setDataSource(Context context, Uri uri, Map<String, String> headers) 
Sets the data source as a content Uri. 
void setDataSource(Context context, Uri uri) 
Sets the data source as a content Uri. 
void setDataSource(FileDescriptor fd, long offset, long length) 
Sets the data source (FileDescriptor) to use. 
void setDataSource(FileDescriptor fd) 
Sets the data source (FileDescriptor) to use. 

Niestety nie akceptuje InputStream jakiegokolwiek rodzaju. Istnieją przykłady, które wykorzystują stary kod proxy NPR, który otwiera lokalny serwer WWW w aplikacji Android, pobiera zdalnie zawartość i wysyła żądane dane do dowolnych gniazd nasłuchowych, jednak kod ten ma więcej niż 2 lata i nadal jest używany jako standard do wykonania tego zadania (mimo że wiele osób zgłasza, że ​​występują problemy związane z jąkaniem itp.).

Zajrzałem do klasy MediaPlayer i chciałem ją rozszerzyć, aby umożliwić to zachowanie, jednak wiele implementacji jest wykonywanych za pomocą kodu natywnego, az tego co przeczytałem, różni producenci urządzeń implementują natywną funkcjonalność audio inaczej (jeśli tak, to nie chcę tego dotknąć! :)).

Więc, jaka jest najlepsza metoda przechowywania i jednoczesnego przesyłania przychodzących danych audio (MP3 lub OGG) ze zdalnego serwera, bez odrzucania danych? Najlepiej z wersjami Androida 2.2 i nowszymi, ale docenione byłoby wejście do każdego dostępnego API.

Odpowiedz

1

Tworzenie lokalnego serwera proxy jest najlepszym rozwiązaniem. Nie patrzyłem na przykład NPR, ale zrobiłem to samo, używając Naga. Zobacz moją odpowiedź here.

Powiązane problemy