5

根据发行说明,StageFright 取代了 GingerBread 版本中的 OpenCore 框架。似乎有很多讨论说: 自 Android 2.3 以来,默认支持 Apple 的 HTTP Live 流。甚至维基百科也提到了这一点。
但是,当我尝试使用捆绑的 API Demos运行Apple 提供 的测试流时,出现以下异常:MediaPlayerDemo_Video.java

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 build 真的支持 Apple 的 HTTP Live Streaming 协议吗?
2. 上面出了什么问题?

请帮忙。

4

2 回答 2

8

好的,我找到了一些数据,我将通过回答我自己的问题来更新这个线程。如果有人有建议或其他考虑事项,请添加。

  1. StagefrightHoneycomb构建支持的框架HTTP Live Streaming。该文档阅读了规范草案的大部分内容,但没有明确提及哪些部分。

  2. 视频和音频应符合Android 支持的媒体格式

  3. 我能够使用AES-128加密播放受内容保护的流。虽然,模拟器的性能(不幸的是,我没有设备)并不好。音频和视频严重不同步。流媒体应用程序必须在真实设备上进行测试。

  4. 您不能通过 https 流式传输您的数据。此外,为了检测流符合 HTTPLive 标准,您必须将"http://"部分 URL替换为"httplive://"

于 2011-02-28T06:27:26.647 回答
0

Gingerbread 确实支持使用 httplive:// 方案前缀播放一些 HLS 流,但支持的编解码器非常有限,并且很容易构建一个完全有效的流,从而使媒体框架崩溃并无法播放。

我的经验表明,这种崩溃通常发生在加载或解码第一段时,即使是加密内容也是如此,但没有请求密钥,这表明框架忽略了 KEY 行。

当然,对于那些只需要支持市场上最新设备的人来说,ICS 中对 HLS 的支持似乎是合理的(尽管仍然不完美)但是我们这些需要某种向后兼容性的人显然被冷落了,并且似乎流式传输(而不是渐进式下载)的唯一选择是 RTSP,它本身在 Android 中的实施很差。

于 2012-09-11T13:12:19.257 回答