1

我正在使用google IMA示例在我的應用程序中運行視頻,經過一些更改以確保它滿足了我的需要,但我仍然遇到了無法重新註冊的問題,我想要當應用程序從後臺返回時要播放的視頻或根據活動停止前的狀態暫停播放的視頻。當從後臺返回視頻時出現空白屏幕

我有狀態,當用戶在暫停模式下停止活動時,我有位置,仍然存在一個問題。當我從後臺返回視頻時,屏幕會變黑,直到我按下控制器中的開始位置,並且無需設置其位置。

我需要從後臺返回時暫停顯示預覽圖像。

@Override 
public void onResume() { 
    if (mVideoPlayerController != null) { 
     mVideoPlayerController.resume(); 

     if (mVideoPlayerController.isContentStarted()) 
      if (isPlayedBeforePaused) { 
       mVideoPlayer.play(); 
      } else { 

      } 
    } 
    super.onResume(); 
} 

,並在我的視頻播放器:

@Override 
    public void play() { 
     start(); 
    } 

    @Override 
    public void start() { 
     super.start(); 
     // Fire callbacks before switching playback state. 
     switch (mPlaybackState) { 
      case STOPPED: 
       for (PlayerCallback callback : mVideoPlayerCallbacks) { 
        callback.onPlay(); 
       } 
       break; 
      case PAUSED: 
       for (PlayerCallback callback : mVideoPlayerCallbacks) { 
        callback.onResume(); 
       } 
       break; 
      default: 
       // Already playing; do nothing. 
     } 
     mPlaybackState = PlaybackState.PLAYING; 
    } 

這是我的作品可憐的解決方案,但我不想寫那種代碼

@Override 
public void onResume() { 
    if (mVideoPlayerController != null) { 
     mVideoPlayerController.resume(); 


     if (mVideoPlayerController.isContentStarted()) 
      if (isPlayedBeforePaused) { 
       mVideoPlayer.play(); 
      } else { 
       mVideoPlayer.play(); 
       final Handler handler = new Handler(); 
       handler.postDelayed(new Runnable() { 
        @Override 
        public void run() { 
         mVideoPlayer.pause(); 
        } 
       }, 1000); 
      } 

    } 
    super.onResume(); 
} 
+0

與使用exoplayer有同樣的問題:) – Amir

+0

應用程序恢復後,您是否調用了'MediaPlayer#setDisplay()'? – fadden

+0

我無法在簡歷上設置顯示,它會拋出非法狀態異常。並且媒體播放器已經在 –

回答

0

手柄暫停回放,另存爲playbackPosition。 在onResume檢查以前的playbackPosition與目前。如果它們不匹配,請將MediaPlayer seek找到playbackPosition,然後用play()繼續播放,否則請執行play()

視圖可能還需要重新初始化。這可能是黑屏的原因。

+0

之前設置了顯示,但是這並不是問題,即使我從後臺返回搜索標記處於正確的位置,並且您可以將它移動到滾動的任何位置,但您仍然可以看到黑屏直到播放被按下 –

+0

'play()'做什麼?不是'MediaPlayer.play()',而是你的'play()'。它是否重新發表意見? – sschrass

+0

我已將代碼添加到我的問題中 –

0

我唯一的解決方案是播放和暫停視頻,但只有在準備好之後。

等我的主要活動

@Override 
public void onResume() { 
    if (mVideoPlayerController != null) { 
     mVideoPlayerController.resume(); 


     if (mVideoPlayerController.isContentStarted()) 
      if (isPlayedBeforePaused) { 
       mVideoPlayer.play(); 
      } else { 
       // set pause request will notify on prepare to play and pause 
       // this fix the bug that on pause when return from background it shows black screen 
       mVideoPlayerController.mVideoTracker.setPauseRequest(); 
      } 

    } 
    super.onResume(); 
} 

和我視頻跟蹤器(視頻圖)

super.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
    @Override 
    public void onPrepared(MediaPlayer mp) { 
     mMediaPlayer = mp; 
     if (mPauseRequest) { 
      play(); 
      pause(); 
      mPauseRequest = false; 
     } 
    } 
}); 

我知道這是不是最好的一段路要走,但它最好的我發現,是錯誤自由和這樣的事情是存在的( - :

希望它會幫助某人

相關問題