MediaPlayer Framework для поддержки GingerBread и Apple HTTP Live Streaming
Согласно примечаниям к выпуску, StageFright заменяет платформу OpenCore в выпуске GingerBread. Похоже, что было много дискуссий, в которых говорилось: Apple Live Streaming от Apple поддерживается по умолчанию начиная с Android 2.3. Даже Википедия упоминает об этом.
Однако, когда я пытаюсь запустить тестовый поток, предоставленный Apple, используя MediaPlayerDemo_Video.java
В комплекте с API Demos я получаю следующие исключения:
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
--- соответствующий код (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);
Вопросы:
1. Действительно ли сборка GingerBread поддерживает протокол HTTP Live Streaming от Apple?
2. Что пошло не так?
Пожалуйста помоги.
2 ответа
Хорошо, я нашел некоторые данные и собираюсь обновить эту ветку, ответив на мой собственный вопрос. Если у кого-то есть предложения или другие соображения, которые нужно внести в таблицу, добавьте.
Stagefright
рамки, которые идут сHoneycomb
построить опорыHTTP Live Streaming
, Документация читает большинство частей проекта спецификации, не указывая явно, какие части.Видео и аудио должны соответствовать мультимедийным форматам, поддерживаемым Android.
Я смог воспроизводить потоки с контентом, используя
AES-128
шифрование. Хотя производительность эмулятора (к сожалению, устройства у меня не было) была не очень хорошей. Аудио и видео были ужасно не синхронизированы. Потоковые приложения должны быть протестированы на реальных устройствах.Вы не можете передавать свои данные через https. Кроме того, чтобы определить, что поток соответствует стандарту HTTPLive, вам придется заменить
"http://"
часть URL с"httplive://"
Gingerbread поддерживает воспроизведение некоторых потоков HLS с использованием префикса схемы httplive://, но поддерживаемые кодеки очень ограничены, и очень легко создать совершенно правильный поток, который разрушает медиа-структуру и не воспроизводится.
Мой опыт показал, что этот сбой обычно происходит при загрузке или декодировании первого сегмента, даже для зашифрованного содержимого, но ключ не запрашивается, что указывает на то, что платформа игнорирует строки KEY.
Конечно, для тех, кому нужна только поддержка самых новых устройств на рынке, поддержка HLS в ICS кажется разумной (хотя и несовершенной), однако те из нас, кому нужна какая-то обратная совместимость, явно не работают, и кажется, что единственный вариант для потоковой передачи (в отличие от прогрессивной загрузки) - это RTSP, который сам по себе плохо реализован в Android.