Android: прямая трансляция медиаплеера останавливается через несколько минут при аудио размером более 15 минут и не буферизует этот звук в онлайн-потоке

#android #android-mediaplayer #media-player #audio-streaming #audio-player

#Android #android-mediaplayer #медиаплеер #потоковое аудио #аудиоплеер

Вопрос:

В моем приложении для медиаплеера я использую медиаплеер по умолчанию, а в моем приложении песня останавливается через 10-13 минут, и это снова начинается с 0 при нажатии на значок паузы. У меня проблема с медиаплеером, который всегда останавливается случайным образом через несколько минут. затем я добавляю прогресс вторичного буфера, я проверяю, что мой звук не буферизуется через некоторое время, поэтому он не воспроизводится после этой минуты буферизации.

есть ли какое-либо решение для решения этой проблемы? пожалуйста, помогите мне в этом как можно скорее.

 if (mediaPlayer == null)
   mediaPlayer = new MediaPlayer();
   initMediaplyer();
            if (mediaPlayer.isPlaying()) {
                Log.e("Playinggggg", "stoppppp");
                mediaPlayer.stop();
                isMediaStart = false;
                isPrepare = false;
                isPause = false;
            }
            mediaPlayer = new MediaPlayer();
            initMediaplyer();
            mediaPlayer.setDataSource(url);

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                mediaPlayer.setAudioAttributes(
                        new AudioAttributes
                                .Builder()
                                .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                                .setUsage(AudioAttributes.USAGE_MEDIA)
                                .build());
            }
            mediaPlayer.prepareAsync();
            isPause = false;
            isPrepare = true;
        } catch (IllegalStateException | IOException e) {
            FileDescriptor fileDescriptor1 = null;
            setMediaPlayer("0", fileDescriptor1);
            e.printStackTrace();
        }
        if (!mediaPlayer.isPlaying()) {
            mediaPlayer.setOnPreparedListener(mp -> {
                Log.e("Playinggggg", "Startinggg");
                mediaPlayer.start();
                isMediaStart = true;
                isprogressbar = false;
                setMediaPlaybackState(STATE_PLAYING);
                mediaPlayer.setOnBufferingUpdateListener((mediaPlayer, i) -> {
                    binding.simpleSeekbar.setSecondaryProgress(i);
                });
                mediaPlayer.setOnCompletionListener(mediaPlayer -> {
                    if(mediaPlayer.isPlaying()){
                        callComplete();
                    }
                });
                mediaPlayer.setOnErrorListener((mediaPlayer, i, i1) -> {
                    switch (i) {
                        case MediaPlayer.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK:
                            Log.d("MediaPlayer Error", "MEDIA ERROR NOT VALID FOR PROGRESSIVE PLAYBACK "   i1);
                            break;
                        case MediaPlayer.MEDIA_ERROR_SERVER_DIED:
                            Log.d("MediaPlayer Error", "MEDIA ERROR SERVER DIED "   i1);
                            break;
                        case MediaPlayer.MEDIA_ERROR_UNKNOWN:
                            Log.d("MediaPlayer Error", "MEDIA ERROR UNKNOWN "   i1);
                            break;
                        default:
                            Log.d("MediaPlayer Error", "not conform "   i1);
                            break;
                    }

                    return false;
                });
            });
        }
    }

if (isPause) {
        binding.llPlay.setVisibility(View.VISIBLE);
        binding.llPause.setVisibility(View.GONE);
        buildNotification(PlaybackStatus.PAUSED, ctx, mainPlayModelList, addToQueueModelList, playFrom, position);
    } else {
        binding.llPause.setVisibility(View.VISIBLE);
        binding.llPlay.setVisibility(View.GONE);
        buildNotification(PlaybackStatus.PLAYING, ctx, mainPlayModelList, addToQueueModelList, playFrom, position);
    }

private void initMediaplyer() {
    try {

        if (mediaSessionManager != null) return;  
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            mediaSessionManager = (MediaSessionManager) ctx.getSystemService(Context.MEDIA_SESSION_SERVICE);
        } 
        mediaSession = new MediaSessionCompat(ctx.getApplicationContext(), "AudioPlayer");
        //Get MediaSessions transport controls
        transportControls = mediaSession.getController().getTransportControls();
        mediaSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);

        mMediaControllerCompatCallback = new MediaControllerCompat.Callback() {

            @Override
            public void onPlaybackStateChanged(PlaybackStateCompat state) {
                super.onPlaybackStateChanged(state);
                if( state == null ) {
                    return;
                }

                switch( state.getState() ) {
                    case PlaybackStateCompat.STATE_PLAYING: {
                        mCurrentState = STATE_PLAYING;
                        break;
                    }
                    case PlaybackStateCompat.STATE_PAUSED: {
                        mCurrentState = STATE_PAUSED;
                        break;
                    }
                }
            }
        };
        mediaSession.setCallback(new MediaSessionCompat.Callback() {
            // Implement callbacks
            @Override
            public void onPlay() {
                super.onPlay();
                callPlay();
            }

            @Override
            public void onPause() {
                super.onPause();
                callPause();
            }

            @Override
            public void onSkipToNext() {
                super.onSkipToNext();
                if (!url.equalsIgnoreCase("")) {
                    callNext();
                }
            }

            @Override
            public void onSkipToPrevious() {
                super.onSkipToPrevious();

                if (!url.equalsIgnoreCase("")) {
                    callPrevious();
                }
            }

        @Override
        public void onStop() {
            super.onStop();
        }

        });
    } catch (Exception e) {
        Log.e("playwell init media err",e.getMessage());
        e.printStackTrace();
    }
}
    }