我发现 Android MediaPlayer 准备使用不同流进行实时流播放所需的时间存在很大差异。
硬数据
我在 prepareAsync() 和 onPrepared(MediaPlayer mp) 回调之间添加了日志记录,并分别测试了几个流。每个流的时间非常一致(+/- 1 秒),结果如下:
- MPR 新闻流:27 秒 (http://newsstream1.publicradio.org:80/)
- MPR古典音乐流:15秒(http://classicalstream1.publicradio.org:80/)
- MPR 当前流:7 秒 (http://currentstream1.publicradio.org:80/)
- PRI 流:52 秒 (http://pri-ice.streamguys.biz/pri1)
测试是在 Nexus S 上执行的,Android 2.3.4,3G 连接(~1100 Kbps)。
播放非流式 MP3 音频文件不是问题。
以下是我如何播放流的片段:
准备媒体播放器:
...
mediaPlayer.setDataSource(playUrl);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.prepareAsync();
...
然后在 onPrepared(MediaPlayer mp) 中:
mediaPlayer.start();
为什么准备一些流而不是其他流需要这么长时间?上述数据似乎表明它可能基于已缓冲的数据量,而不是缓冲音频内容的持续时间。这真的可以吗?
更新:我已经在具有 Android 1.6、2.2 和 2.3.4 的物理设备以及具有 1.6、2.1、2.2、2.3.1 和 2.3.3 的模拟器上测试了直播。我只看到 2.3.3 和 2.3.4 的长时间延迟。旧版本在 5 秒内开始播放。