2011-01-19 10 views
5

Zgodnie z informacjami o wydaniu, StageFright zastępuje framework OpenCore w wydaniu GingerBread. Wydaje się, że było wiele dyskusji, które mówią: strumieniowanie HTTP na żywo HTTP jest obsługiwane domyślnie od Androida 2.3. Nawet Wikipedia wspomina o tym.
Jednak kiedy próbuję uruchomić test stream dostarczonego przez Apple przy użyciu MediaPlayerDemo_Video.java pakiecie z Demos API dostaję następującymi wyjątkami:MediaPlayer Framework on GingerBread i obsługa HTTP Live Streaming na żywo

setDataSource('http://devimages.apple.com/iphone/samples/bipbop/gear1/ 
prog_index.m3u8') 
connect to devimages.apple.com:80/iphone/samples/bipbop/gear1/ 
prog_index.m3u8 @0 
INFO/NuCachedSource2(34): ERROR_END_OF_STREAM 
error (1, -2147483648) 
ERROR/MediaPlayerDemo(667): error: Prepare failed.: status=0x1 
java.io.IOException: Prepare failed.: status=0x1 
at android.media.MediaPlayer.prepare(Native Method) 
at 
com.video.stream.MediaPlayerDemo_Video.playVideo(MediaPlayerDemo_Video.java: 
125) 
at 
com.video.stream.MediaPlayerDemo_Video.surfaceCreated(MediaPlayerDemo_Video.java: 
181) 
    ... 
    surfaceChanged called 
    Displayed com.video.stream/.MediaPlayerDemo_Video: +1s652ms (total 
    +7s427ms) 
    GC_EXPLICIT freed 2K, 55% free 2514K/5511K, external 716K/1038K, 
    paused 183ms 
    GC_EXPLICIT freed 17K, 52% free 2782K/5767K, external 716K/1038K, 
    paused 87ms 
    GC_EXPLICIT freed 68K, 50% free 2972K/5895K, external 2544K/3109K, 
    paused 104ms 
    request time failed: java.net.SocketException: Address family not 
    supported by protocol 

--- odpowiedni kod (MediaPlayerDemo_Video.java):

path = "http://devimages.apple.com/iphone/samples/bipbop/gear1/ 
prog_index.m3u8"; 
mMediaPlayer = new MediaPlayer(); 
mMediaPlayer.setDataSource(path); 
mMediaPlayer.setDisplay(holder); 
mMediaPlayer.prepare(); 
mMediaPlayer.setOnBufferingUpdateListener(this); 
mMediaPlayer.setOnCompletionListener(this); 
mMediaPlayer.setOnPreparedListener(this); 
mMediaPlayer.setOnVideoSizeChangedListener(this); 
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 

Pytania:
1. Czy GingerBread rzeczywiście obsługuje protokół HTTP Live Streaming firmy Apple?
2. Co poszło nie tak powyżej?

Proszę o pomoc.

+0

Dodałem {{citation needed}} na stronie Wiki i wygląda na to, że autor zareagował zmieniając sekcję. – Samuh

+0

Zestaw SDK podglądu dla bloku pustakowego jest dostępny do pobrania i jest reklamowany w celu obsługi m3U8. jednak nie byłem w stanie odtworzyć na nim strumienia testowego Apple. – Samuh

+0

Złożyłem zgłoszenie błędu: http://code.google.com/p/android/issues/detail?id=14646&q=stars%3D2&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars – Samuh

Odpowiedz

8

W porządku, znalazłem trochę danych i mam zamiar zaktualizować ten wątek, odpowiadając na moje własne pytanie. Jeśli ktoś ma sugestie lub inne uwagi do wniesienia do tabeli, dodaj.

  1. Stagefright ramy, które pochodzi z Honeycomb build obsługuje HTTP Live Streaming. Dokumentacja czyta większość części projektu specyfikacji bez wyraźnego wskazania, które części.

  2. Film i dźwięk powinny być zgodne z media formats supported by Android.

  3. Udało mi się odtwarzać strumienie chronione treścią przy użyciu szyfrowania AES-128. Jednak wydajność emulatora (niestety nie miałem urządzenia) nie była dobra. Dźwięk i obraz były strasznie zsynchronizowane. Aplikacje strumieniowe MUSZĄ być testowane na prawdziwych urządzeniach.

  4. Nie można przesyłać strumieniowo danych przez https. Ponadto, w celu wykryć, że strumień jest zgodny z normą HTTPLive będziesz musiał zastąpić "http://" część adresu URL z "httplive://"

+0

Witam, zrobiłem to samo, co powiedziałeś. Testowałem w (adres URL z "httplive") 2.2.2.3 i 4.0 (URL z "http") działa dobrze, ale nie działa tylko w Xperia Neo v, które mają OS 2.3.4. czy możesz powiedzieć, co jest powodem tego problemu? – Hasmukh

0

Gingerbread ma wsparcie odtwarzania niektórych strumieni HLS pomocą httplive: // program prefiks ale wspierane kodeki są bardzo ograniczone i bardzo łatwo jest skonstruować całkowicie poprawny strumień, który powoduje awarię środowiska medialnego i nie działa.

Moje doświadczenia wykazały, że awarie zwykle występują podczas ładowania lub dekodowania pierwszego segmentu, nawet w przypadku zaszyfrowanych treści, ale że klucz nie jest żądany, co sugeruje, że framework ignoruje linie KEY.

Oczywiście, dla tych, którzy potrzebują tylko obsługi najnowszych urządzeń na rynku, wsparcie dla HLS w ICS wydaje się rozsądne (choć nadal niedoskonałe), jednak ci z nas, którzy potrzebują jakiejś wstecznej zgodności, są zdecydowanie wykluczeni na mrozie i wydaje się, że jedyną opcją dla streamingu (w przeciwieństwie do progresywnego pobierania) jest RTSP, który sam w sobie jest słabo wprowadzony w Androida.

Powiązane problemy