![](/img/trans.png)
[英]How to pause ExoPlayer 2 playback and resume (PlayerControl was removed)
[英]How to monitor playback position in exoplayer
我正在努力寻找一种方法来创建一个线程来监视 Exoplayer 应用程序中的播放位置。
在下面的代码中,我需要的一个简单任务是通过覆盖onIsPlayingChanged function 在每 1000 毫秒后记录 position 参数。 但我知道这只会发生一次,如果应用程序 state 发生变化,但是为了使这种情况持续下去,我认为我应该创建一个线程。 请让我知道如何实现这一目标。 如您所见,注释代码是我尝试过的代码,但绝对不正确。
private class PlaybackStateListener implements Player.EventListener{
@Override
public void onIsPlayingChanged(boolean isPlaying) {
//TODO: Add handler to poll the playback position continuously.
/* if(isPlaying){
HandlerCompat.
postDelayed(new Runnable() {
@Override
public void run() {
long positionParam = playbackPosition;
}
});
}*/
if (isPlaying) {
Log.d(TAG, "Playing position is " + playbackPosition);
} else {
// Not playing because playback is paused, ended, suppressed, or the player
// is buffering, stopped or failed. Check player.getPlaybackState,
// player.getPlayWhenReady, player.getPlaybackError and
// player.getPlaybackSuppressionReason for details.
}
}
Kotlin 协程方式
private fun pollCurrentDuration() = flow {
while (player.currentPosition + DURATION_OFFSET <= player.duration) {
emit(player.currentPosition + DURATION_OFFSET)
delay(DEFAULT_DELAY_MS)
}
}.conflate()
以下代码可用于使用处理程序 postDelayed 方法解决此类问题。
final Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//My code
}
handler.postDelayed(new Runnable() {
@Override
public void run() {
playbackPosition = player.getCurrentPosition();
send(playbackPosition); //Function to update position
handler.postDelayed(this, 1000); //1000ms frequency of updates.
}
}, 1000);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.