MediaPlayer Framework для поддержки GingerBread и Apple HTTP Live Streaming - PullRequest
5 голосов
/ 19 января 2011

Согласно примечаниям к выпуску, StageFright заменяет платформу OpenCore в выпуске GingerBread. Похоже, что было много дискуссий, в которых говорилось: потоковая передача HTTP Live от Apple поддерживается по умолчанию с Android 2.3. Даже Википедия упоминает об этом.
Однако, когда я пытаюсь запустить тестовый поток , предоставленный Apple, используя MediaPlayerDemo_Video.java в комплекте с демонстрациями API, я получаю следующие исключения:

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 поддерживает потоковую передачу Apple HTTP Live протокол
2. Что пошло не так, как надо?

Пожалуйста, помогите.

Ответы [ 2 ]

8 голосов
/ 28 февраля 2011

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

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

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

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

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

0 голосов
/ 11 сентября 2012

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

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

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

...