首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ExoPlayer2如何循环播放视频的一部分/片段

ExoPlayer2如何循环播放视频的一部分/片段
EN

Stack Overflow用户
提问于 2020-02-13 22:49:17
回答 1查看 158关注 0票数 0

我有一段10秒的视频。我想循环一个从2秒到6秒的片段。在正确的时间启动播放器很容易:

代码语言:javascript
运行
复制
player?.seekTo(2000)

我不认为ExoPlayer2库中有定义结束位置的功能。所以我试着添加了一个延迟协同例程。使用seekToPositionAndStartCounter方法。这在一个单独的项目中工作。但在实际项目中,onPlayerStateChanged突然被触发了很多次。

代码语言:javascript
运行
复制
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
}
EN

回答 1

Stack Overflow用户

发布于 2020-02-18 16:14:11

如果你不尝试这样做,那就考虑一下这个。

播放器的getCurrentPosition,如果播放器到达你想要的结束位置,然后运行player.seekto(2),它在特定的视频片段中循环视频。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60210527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档