根据发行说明,StageFright取代了Gingerbread版本中的Opencore框架。似乎有许多讨论说:苹果的HTTP实时流默认是自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.姜饼构建是否真的支持Apple的HTTP实时流媒体协议?
2.上面有什么问题?

请帮忙。

有帮助吗?

解决方案

好吧,我找到了一些数据,我将通过回答自己的问题来更新此线程。如果有人有建议或其他考虑因素可以添加。

  1. Stagefright随附的框架 Honeycomb 构建支持 HTTP Live Streaming. 。文档读取 草案规范的大部分部分 无明确提及哪些部分。

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

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

  4. 您无法通过HTTPS流传输数据。另外,为了 探测 该流符合您必须替换的Httplive标准 "http://" 与URL的一部分 "httplive://"

其他提示

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

我的经验表明,即使是对加密的内容,也没有要求键,即使键忽略了键行。

当然,对于那些只需要支持市场上最新设备的人来说,对ICS中HLS的支持似乎是合理的(尽管仍然不完美),但是我们当中那些需要某种倒退兼容性的人在寒冷中绝对抛弃了RTSP似乎是唯一的流式传输选择(而不是渐进下载),它本身在Android中的强制性很差。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top