4

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

}
4

1 回答 1

1

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

另一种方法是不使用create,而是使用此处使用的另一种格式,即在 prepare 方法之前设置一个侦听器,并在调用侦听器时调用该start方法。

于 2011-07-24T01:24:29.527 回答