0

Я пытаюсь сделать потоковое видео, которое прекрасно работает в портретном режиме. Затем я добавил код для onConfigurationChange, чтобы раздуть еще один макет для ландшафтного режима. но мое приложение становится разбился на этой линии:Объект MediaPlayer, получивший Null после изменения ориентации?

int timeElapsed = mediaPlayer.getCurrentPosition(); 

Здесь я получаю mediaPlayerв нуль в то время как он был уже инициализирован.

MediaPlayer mediaPlayer; 
    public void onCreate(final Bundle savedInstanceState) { 

      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_detailvideo); 
      context = this; 
      mediaPlayer = new MediaPlayer(); 
      videoView = (VideoViewCustom) findViewById(R.id.videoplayer); 
       try { 
      videoView.setDimensions(1000, 200); 
      videoView.getHolder().setFixedSize(1000, 200); 
      videoView.setVideoPath(streamURL); 
      videoView.setMediaController(mediaController); 
     } 
     catch (Exception e) { 
      Log.e("Error", e.getMessage()); 
      e.printStackTrace(); 
     } 
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
      // Close the progress bar and play the video 
      public void onPrepared(MediaPlayer mp) { 
       Log.d(TAG,"setOnPreparedListener"); 
       mediaPlayer = mp; 
       int timeDuration = 0; 
       boolean videoPlaying = false; 
       if(savedInstanceState != null) { 
        timeDuration = savedInstanceState.getInt("timeduration"); 
        videoPlaying = savedInstanceState.getBoolean("videoPlaying"); 
        Log.d(TAG, "timeDuration saved:" + timeDuration); 
        Log.d(TAG, "videoPlaying saved:" + videoPlaying); 


        if (videoPlaying) { 
         mediaPlayer.seekTo(timeDuration); 
         mediaPlayer.start(); 
        } else { 
         mediaPlayer.seekTo(timeDuration); 
        } 
       } 
       else 
       { 
        mediaPlayer.start(); 
       } 
       videoView.start(); 
       finalTime = mediaPlayer.getDuration(); 
       Log.d(TAG, "mp.getCurrentPosition():" + mediaPlayer.getCurrentPosition()); 
       videoSeekBar.setProgress(timeDuration); 
       videoSeekBar.setMax(finalTime); 
       durationHandler.postDelayed(updateSeekBarTime,1000); 
      } 
     }); 
Runnable updateSeekBarTime = new Runnable() { 
     public void run() { 

      //get current position 
      int timeElapsed = mediaPlayer.getCurrentPosition(); //**is crashing here after orientation change** 
      //set seekbar progress 
      videoSeekBar.setProgress((int) timeElapsed); 
      Log.d(TAG,"timeElapsed:"+timeElapsed); 
      //repeat yourself that again in 100 miliseconds 
      durationHandler.postDelayed(this,1000); 
     } 
    }; 

Как я могу избежать этой проблемы? И как я могу снова начать видео в ландшафте с той же позиции, где пользователь остановился в портретном режиме? Благодарю.

+0

Отъезд ответ здесь: http://stackoverflow.com/questions/10046369/losing-mediaplayer-other-variables -when-device-is-rotated Вы можете использовать Службу для воспроизведения аудио. Поэтому, если устройство повернуто, вы не потеряете трек аудио, и он не будет остановлен. – NightFury

+0

Я не пользуюсь сервисом .... Я играю видео, и это потоковое видео с сервера – Erum

+0

Просто идея помочь вам. http://jtdowdall.blogspot.com/2014/03/maintain-video-playback-during.html Удачи! – NightFury

ответ

0

Рекомендуется написать одноэлементный класс, который расширяет MediaPlayer, а затем записывать методы, которые вы хотите использовать для воспроизведения медиафайлов, приостанавливая возобновление и т. Д. Теперь вы можете сохранить call-паузу() для этого одноэлементного класса перед вращением и когда экран повернут затем возобновите() ваш плеер.

для приостановки

Mediaplayer.pause(); 
media_length=Mediaplayer.getCurrentPosition(); 

для возобновления

Mediaplayer.seekTo(length); 
Mediaplayer.start(); 
+0

нет такого метода для возобновления в медиаплеере, что этот метод будет делать? – Erum

+0

Я отредактировал свой ответ @Erum – Akbar

+0

Я уже даже в режиме паузы воспроизведения этот код не работает – Erum