我正在尝试启动从网站流式传输的媒体播放器。现在,当按下“开始”时,整个活动只会在流连接时冻结5到20秒。我正试图获得“player.start();”调用在一个线程中运行以在流连接时释放活动但它不起作用。有人有什么想法吗?
private void startplayer() {
try {
stream_player = new MediaPlayer();
stream_player.setAudioStreamType(AudioManager.STREAM_MUSIC);
stream_player = MediaPlayer.create(this, Uri.parse("http://stream-address"));
Thread thread = new Thread(new Runnable() {
public void run() {
stream_player.start();
}
});
thread.start();
SetNotification(1, "live");
liveON = true;
} catch (Exception e) {
Log.e(getClass().getName(), "Error starting to stream audio.", e);
Toast.makeText(this, "Stream seems to be offline", Toast.LENGTH_LONG).show();
}
}
答案 0 :(得分:1)
将整个方法移动到单独的线程中。花费最多时间的部分是MediaPlayer.create()
部分,因为这是一个同步调用,它在媒体播放器准备好播放时返回。
另一种方法是不使用create
,而是使用here中使用的另一种格式,它在prepare方法之前设置一个监听器,并且在调用监听器时,使用start
方法被称为。