Android ExoPlayer зациклить видео
val playerListener = object : Player.Listener {
override fun onPlaybackStateChanged(playbackState: Int) {
super.onPlaybackStateChanged(playbackState)
when (playbackState) {
Player.STATE_ENDED -> {
restartPlayer()
Log.d("Player", "STATE_ENDED")
}
Player.STATE_READY -> {
videoView.player = player
play()
Log.d("Player", "STATE_READY")
}
Player.STATE_BUFFERING -> {
Log.d("Player", "STATE_BUFFERING")
}
Player.STATE_IDLE -> {
Log.d("Player", "STATE_IDLE")
}
}
}
override fun onPlayerError(error: PlaybackException) {
super.onPlayerError(error)
}
}
val dataSourceFactory: DataSource.Factory = DefaultHttpDataSource.Factory()
player = ExoPlayer.Builder(itemView.context)
.build()
.apply {
val source = ProgressiveMediaSource.Factory(dataSourceFactory)
.createMediaSource(MediaItem.fromUri(Uri.parse(item.file)))
setMediaSource(source)
prepare()
addListener(playerListener)
volume = 0f
}
Я создаю плеер в андроид приложении, для проигрывания видео идея крутить видео в цикле на странице товара, далее для управления использую методы
fun releasePlayer() {
player?.release()
player = null
}
fun pause() {
player?.playWhenReady = false
}
fun play() {
player?.playWhenReady = true
}
fun restartPlayer() {
player?.seekTo(0)
player?.playWhenReady = true
}
И моя проблема в том, что с вызовом метода restartPlayer, видео начинает загружаться повторно, в логах я вижу лог STATE_BUFFERING.
Но если я добавляю repeatMode = Player.REPEAT_MODE_ONE, то переход с конца видео в начало происходит плавно и автоматически, но каждых 2-3 секунды видео стопорится, и начинает буферизироваться.
Вопрос: Как реализовать быструю загрузку 10-30 секундного видео, и заставить его работать максимально плавно в цикле?