我正在构建一个Android应用程序,它应该从URL流式传输在线广播电台。
我目前正在进行演示,我从在线教程中获得了很多帮助,但我遇到了问题。
当我点击NEXT按钮时,它应该从另一个URL获取它的音频,这使它具有更改电台的效果,但是它需要花费太多时间,而且大多数时候它似乎不起作用。
有没有什么方法可以把时间缩短95%因为我希望它几乎立即开始你点击下一个按钮
下一个按钮的代码
b_next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mediaPlayer.stop();
mediaPlayer.reset();
try {
mediaPlayer.setDataSource("http://stream.radioreklama.bg/veronika.opus");
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.start();
}
});
问题可能不是缓冲 - 例如,服务器端可能会有一些缓慢的启动时间。
无论哪种方式,如果你想要监控缓冲,就会有一个回调提供给MediaPlayer,它将执行此操作 - 'OnBufferingUpdateListener.onBufferingUpdate()'。
从MediaPlayer文档(https://developer.android.com/reference/android/media/MediaPlayer.html#setOnPreparedListener(android.media.MediaPlayer.OnPreparedListener)):
处于Started状态时,如果事先通过setOnBufferingUpdateListener(OnBufferingUpdateListener)注册了OnBufferingUpdateListener,则内部播放器引擎会调用用户提供的OnBufferingUpdateListener.onBufferingUpdate()回调方法。此回调允许应用程序在流式传输音频/视频时跟踪缓冲状态。
加速跨平台切换流的一种常用技术是预先准备下一个流。
对于你的情况,你需要第二个媒体播放器,你可以初始化并转移到准备状态,甚至可能寻找一个点,然后一旦你停止另一个播放它。
对于直播流来说,这会有点困难,因为你无法以同样的方式看到某一点。您可以尝试让第二个播放器播放但音量调低,尽管这显然效率不高,除非您有一些可靠的方法来预测用户何时即将切换。