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 ответа

Решение

Хорошо, я нашел некоторые данные и собираюсь обновить эту ветку, ответив на мой собственный вопрос. Если у кого-то есть предложения или другие соображения, которые нужно внести в таблицу, добавьте.

  1. Stagefrightрамки, которые идут с Honeycomb построить опоры HTTP Live Streaming, Документация читает большинство частей проекта спецификации, не указывая явно, какие части.

  2. Видео и аудио должны соответствовать мультимедийным форматам, поддерживаемым Android.

  3. Я смог воспроизводить потоки с контентом, используя AES-128 шифрование. Хотя производительность эмулятора (к сожалению, устройства у меня не было) была не очень хорошей. Аудио и видео были ужасно не синхронизированы. Потоковые приложения должны быть протестированы на реальных устройствах.

  4. Вы не можете передавать свои данные через https. Кроме того, чтобы определить, что поток соответствует стандарту HTTPLive, вам придется заменить "http://" часть URL с "httplive://"

Gingerbread поддерживает воспроизведение некоторых потоков HLS с использованием префикса схемы httplive://, но поддерживаемые кодеки очень ограничены, и очень легко создать совершенно правильный поток, который разрушает медиа-структуру и не воспроизводится.

Мой опыт показал, что этот сбой обычно происходит при загрузке или декодировании первого сегмента, даже для зашифрованного содержимого, но ключ не запрашивается, что указывает на то, что платформа игнорирует строки KEY.

Конечно, для тех, кому нужна только поддержка самых новых устройств на рынке, поддержка HLS в ICS кажется разумной (хотя и несовершенной), однако те из нас, кому нужна какая-то обратная совместимость, явно не работают, и кажется, что единственный вариант для потоковой передачи (в отличие от прогрессивной загрузки) - это RTSP, который сам по себе плохо реализован в Android.

Другие вопросы по тегам