SurfaceView Воспроизведение видео: подключение: уже подключено (cur = 3 req = 3) - PullRequest
0 голосов
/ 16 января 2019

Привет, я знаю, что по этой теме уже есть куча постов, но ни одна из них не работает.

Я создаю приложение, которое отображает видео и изображения каждую минуту или около того. Видео воспроизводится в течение пары или более раз, но все равно вылетает в более позднее время.

У меня есть этот код для справки, пожалуйста, помогите. Для справки, я использую это видео как источник видео

Любая помощь приветствуется. Заранее спасибо.

Я получаю такую ​​ошибку connect: уже подключен (cur = 3 req = 3) java.lang.IllegalStateException atroid.media.MediaPlayer.prepareAsync (собственный метод)

@Override
public void onDisplayVideo(String url) {
    ivImageAds.setVisibility(View.GONE);
    surfaceView.setVisibility(View.VISIBLE);

    surfaceHolder = surfaceView.getHolder();
    surfaceHolder.addCallback(new SurfaceHolder.Callback() {
        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            try {
                mediaPlayer = new MediaPlayer();
                mediaPlayer.setDisplay(surfaceHolder);
                mediaPlayer.setDataSource(url);
                mediaPlayer.setOnCompletionListener(mp -> {
                    // release it here after using.
                    releaseMediaPlayer();

                    adsViewPresenter.mediaPlayed();
                });
                mediaPlayer.setOnPreparedListener(mp -> mediaPlayer.start());

                if (Build.VERSION.SDK_INT >= 21) {
                    mediaPlayer.setAudioAttributes(new AudioAttributes.Builder()
                            .setUsage(AudioAttributes.USAGE_MEDIA)
                            .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                            .build());
                } else {
                    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                }

                mediaPlayer.prepareAsync();

            } catch (IOException e) {
                adsViewPresenter.mediaError(e);
            }
        }

        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { }

        @Override
        public void surfaceDestroyed(SurfaceHolder holder) { }
    });
}

private void releaseMediaPlayer() {
    if (mediaPlayer != null) {
        mediaPlayer.reset();
        mediaPlayer.release();
        mediaPlayer = null;
    }
}

@Override
protected void onPause() {
    super.onPause();
    releaseMediaPlayer();
}

@Override
protected void onDestroy() {
    super.onDestroy();
    releaseMediaPlayer();
}
...