在线程问题中启动媒体播放器

时间:2011-07-24 00:41:44

标签: android media-player runnable

我正在尝试启动从网站流式传输的媒体播放器。现在,当按下“开始”时,整个活动只会在流连接时冻结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();
    }

}

1 个答案:

答案 0 :(得分:1)

将整个方法移动到单独的线程中。花费最多时间的部分是MediaPlayer.create()部分,因为这是一个同步调用,它在媒体播放器准备好播放时返回。

另一种方法是不使用create,而是使用here中使用的另一种格式,它在prepare方法之前设置一个监听器,并且在调用监听器时,使用start方法被称为。