ExoPlayer2, как l oop часть / сегмент видео - PullRequest
0 голосов
/ 13 февраля 2020

У меня видео 10 секунд. Я хочу l oop отрезок от 2 до 6 секунд. Начать проигрыватель в нужное время очень просто:

player?.seekTo(2000)

Я не думаю, что в библиотеке ExoPlayer2 есть функциональность для определения конечной позиции. Поэтому я попытался добавить подпрограмму задержки. С помощью метода seekToPositionAndStartCounter. Это работает в отдельном проекте. Но используемый в реальном проекте, onPlayerStateChanged запускается много раз внезапно.

var elapsedTime = 0L // just for testing

private fun showVideoWhenDoneLoading() {
    videoView?.player?.addListener(object : Player.EventListener {
        override fun onPlayerStateChanged(playWhenReady: Boolean, playbackState: Int) {
            super.onPlayerStateChanged(playWhenReady, playbackState)
            if (playbackState == Player.STATE_READY) {
                if (playWhenReady) {
                    seekToPositionAndStartCounter()
                } else {
                    cancelCounter()
                }
            }
        }
    })
}

private fun seekToPositionAndStartCounter() {
    elapsedTime = System.currentTimeMillis()

    cancelCounter()
    job = GlobalScope.launch(Dispatchers.IO) {
        Timber.d("starting Thread name = ${Thread.currentThread().name}")
        player?.seekTo(startPosition)

        if (duration != 0L) {
            runBlocking {
                delay(duration)
            }
            GlobalScope.launch(Dispatchers.Main) {
                Timber.d("duration = $duration elapsedTime = ${System.currentTimeMillis()-elapsedTime} Thread name = ${Thread.currentThread().name}")
                seekToPositionAndStartCounter()
            }
        }
    }
}

private fun cancelCounter() {
    job?.cancel()
    job = null
}

1 Ответ

0 голосов
/ 18 февраля 2020

Если вы не попробуете это, подумайте об этом.

getCurrentPosition игрока, и если игрок достигнет конечной позиции, которую вы хотите, тогда запустите player.seekto(2), он зацикливает видео в указанном сегменте c видео.

...