LoginSignup
0
1

More than 5 years have passed since last update.

ExoPlayer でネットワーク接続が復旧した直後に自動でストリーミング再生を再開してみた件

Last updated at Posted at 2018-08-26

目的

ExoPlayer で動画を視聴中にオフライン等で再生が不能になった後、オンラインに復帰して再生可能な状態になったときに再生を自動で再開したい。

方法

Player.EventListeneronPlayerStateChanged() から返却された playbackStatePlayer.STATE_IDLE の場合や、onPlayerError() などで再生の失敗を検知した場合に ExoPlayerprepare() を実行しておきます。

サンプル

override fun onPlayerStateChanged(playWhenReady: Boolean, playbackState: Int) {
    when (playbackState) {
        Player.STATE_IDLE -> player?.prepare(mediaSource, false, false)
    }
}

ExoPlayer.prepare() の第2引数は boolean resetPosition になっていますが、動画が生配信の場合は true にしておくのが良いかと思います。

結果

機内モードを解除した直後に動画の再生が再開されました :arrow_forward:

タイトルなし.gif

何故できるのか

prepare() を実施すると playerplaybackStatePlayer.STATE_BUFFERING に変わり、一定時間経過しても再生準備ができない場合は playbackStatePlayer.STATE_IDLE に変わるため更に prepare() が呼ばれる。
つまり再生の準備に成功するまで一定間隔でリトライを繰り返す無限ループに陥るからである。
そんな仕組みで大丈夫なのでしょうか(?)

参考 :link:

Android ExoPlayer not resuming after network is connected - Stack Overflow

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1