我有一段10秒的视频。我想循环一个从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
}
发布于 2020-02-18 16:14:11
如果你不尝试这样做,那就考虑一下这个。
播放器的getCurrentPosition
,如果播放器到达你想要的结束位置,然后运行player.seekto(2)
,它在特定的视频片段中循环视频。
https://stackoverflow.com/questions/60210527
复制相似问题