gpt4 book ai didi

android - Exoplayer2.x:​​ Player.STATE_ENDED 在视频结束时触发两次,如何在 android 中实现 exoplayer?

转载 作者:行者123 更新时间:2023-12-02 12:17:32 33 4
gpt4 key购买 nike

我正在使用 Exoplayer 播放播放列表中的视频。我想在当前视频结束时自动播放下一个视频。为此,我向我的播放器添加了一个 EventListener。这是一个 fragment :

private val videoPlayerListener = object: Player.EventListener {
override fun onPlayerStateChanged(playWhenReady: Boolean, playbackState: Int) {
when(playbackState) {
Player.STATE_IDLE -> showLoadingView()
Player.STATE_READY -> hideLoadingView()
Player.STATE_BUFFERING -> showVideoProgressWheel()
Player.STATE_ENDED -> {
Log.d(TAG, "fired")
playNextVideo()
}
}
}

override fun onPlayerError(error: ExoPlaybackException?) {
// handle error event
}
}

这种方法的问题是我的日志显示 Player.STATE_ENDED 触发了两次。这样做的链式效应是我的播放列表从

video 1 -> video 3 -> video 5 -> video 7...

代替

video 1 -> video 2 -> video 3 -> video 4...

我做了一些研究,发现 this issue在 Github 上。我检查了我的代码,我意识到我实际上是在 OnCreate()、OnStart()、OnPause()、OnResume() 和 OnStop() 中调用一个包含 addListener(videoPlayerListener) 的方法。为了解决这个问题,我在 addListener 行之前添加了以下内容:

try {
player.removeListener(videoPlayerListener)
Log.d(TAG, "Listener temporarily deleted")
}
catch (e: Exception) {}

请注意,我的代码中只有一个函数包含 addListener(...),我将 removeListener() 调用直接放在 之前addListener() 行。尽管如此,每次视频结束时,Player.STATE_ENDED 仍会被调用两次。

我该怎么办?

最佳答案

使用此代码

全局取一个这样的变量

var isVideoEnded=false

然后在你的监听器中执行此操作

private val videoPlayerListener = object: Player.EventListener {
override fun onPlayerStateChanged(playWhenReady: Boolean, playbackState: Int) {
when(playbackState) {
Player.STATE_IDLE -> showLoadingView()
Player.STATE_READY -> {
hideLoadingView()
isVideoEnded=false
}
Player.STATE_BUFFERING -> showVideoProgressWheel()
Player.STATE_ENDED -> {
if(!isVideoEnded){
playNextVideo()
isVideoEnded=true
}

Log.d(TAG, "fired")

}
}
}

override fun onPlayerError(error: ExoPlaybackException?) {
// handle error event
}
}

关于android - Exoplayer2.x:​​ Player.STATE_ENDED 在视频结束时触发两次,如何在 android 中实现 exoplayer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62447467/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com