4

Web サイトからストリーミングするメディア プレーヤーを起動しようとしています。現在、「開始」を押すと、ストリームが接続されている間、アクティビティ全体が 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で使用されている別の形式を使用します。start

于 2011-07-24T01:24:29.527 に答える