根据发行说明,StageFright取代了GingerBread版本中的OpenCore框架。似乎有很多讨论说:从Android 2.3开始,默认支持Apple的HTTP Live流媒体。甚至Wikipedia也提到了这一点
但是,当我尝试使用与API演示捆绑的MediaPlayerDemo_Video.java
运行Apple提供的test stream时,我得到了
以下例外:
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直播流
协议?
2.上面出了什么问题?
请帮忙。
答案 0 :(得分:8)
好吧,我找到了一些数据,我将通过回答我自己的问题来更新这个帖子。如果有人提出建议或其他考虑因素,请添加。
Stagefright
版本附带的 Honeycomb
框架支持HTTP Live Streaming
。该文档读取草案规范的大部分内容,未明确提及哪些部分。
视频和音频应符合media formats supported by Android。
我能够使用AES-128
加密来播放受内容保护的流。虽然,模拟器的性能(不幸的是,我没有设备)并不好。音频和视频非常不同步。流媒体应用程序必须在真实设备上进行测试。
您无法通过https流式传输数据。此外,为了检测该流符合HTTPLive标准,您必须使用"http://"
替换"httplive://"
部分网址
答案 1 :(得分:0)
Gingerbread确实支持使用httplive:// scheme前缀播放一些HLS流,但支持的编解码器非常有限,并且很容易构建一个完全有效的流,它会崩溃媒体框架而无法播放。
我的经验表明,这种崩溃通常发生在加载或解码第一个段时,即使是加密内容,但是没有请求密钥,表明框架忽略了KEY行。
当然,对于那些只需要支持市场上最新设备的用户来说,ICS中对HLS的支持似乎是合理的(尽管仍然不完善)但是我们这些需要某种向后兼容性的人却被明确地留在了感冒,似乎流媒体(而不是渐进式下载)的唯一选择是RTSP,它本身在Android中的表现很差。