首页 > 解决方案 > MediaPlayer 流媒体挂起应用程序并在连接缓慢时崩溃

问题描述

我正在构建一个广播流媒体应用程序。当我有良好的互联网连接时,一切都很好,即使在多任务处理时也是如此。问题是没有互联网连接或互联网连接不佳。

在您点击播放按钮的那一刻,应用程序会冻结,并且仅在音频流开始时恢复。对于慢速连接,这可能需要几秒钟,挂起应用程序。如果没有互联网,应用程序最终会在一段时间后崩溃。

public class SoundService extends Service {
    MediaPlayer mp;

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    public void onCreate() {

        mp = new MediaPlayer();
        try {
            mp.setDataSource("stream_url");
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
            Log.v(TAG, "Error 1");
            onDestroy();
        } catch (IllegalStateException e) {
            e.printStackTrace();
            Log.v(TAG, "Error 2");
            onDestroy();
        } catch (IOException e) {
            e.printStackTrace();
            Log.v(TAG, "Error 3");
            onDestroy();
        }

        try {
            mp.prepare();
            mp.start();
        } catch (IllegalStateException e) {
            e.printStackTrace();
            Log.v(TAG, "Error 4");
            onDestroy();
        } catch (IOException e) {
            e.printStackTrace();
            Log.v(TAG, "Error 5");
            onDestroy();
        }
    }

    public int onStartCommand(Intent intent, int flags, int startId) {
        mp.start();
        return Service.START_NOT_STICKY;
    }

    public void onDestroy() {
        mp.stop();
        mp.release();
        stopSelf();
        super.onDestroy();
   }
}

这就是我启动流(播放按钮)的方式:

startService(new Intent(MainActivity.this, SoundService.class));

在没有连接的情况下,应用程序最终会收到错误号 5,但这仅在崩溃时发生,因此停止播放器为时已晚。在此之前,我没有得到任何“捕获”。

作为临时解决方法,我在开始流式传输之前检查互联网连接。这样我可以防止崩溃,但我仍然遇到应用程序挂在慢速连接上的问题。

有任何想法吗?谢谢!

标签: android-studioandroid-mediaplayeraudio-streaming

解决方案


使用此代码可能对您有所帮助

 mediaPlayer.prepareAsync();
                mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    @Override
                    public void onPrepared(MediaPlayer mp) {
                        mediaPlayer.start();
                    }
                });

推荐阅读