ExoPlayer
类中有一个名为EventListener
的接口。但是没有任何方法可以通知它是否被缓冲。
是否还有其他回调函数可用于检查ExoPlayer
的状态?
答案 0 :(得分:1)
但是没有任何方法可以通知它是否被缓冲。
你的意思是 看看我们什么时候有足够的缓冲 ?
据我所知,对于EXOplayer:
...
} else if (state == ExoPlayer.STATE_BUFFERING) {
boolean isNewlyReady = enabledRenderers.length > 0
? (allRenderersReadyOrEnded && haveSufficientBuffer(rebuffering))
: isTimelineReady(playingPeriodDurationUs);
if (isNewlyReady) {
setState(ExoPlayer.STATE_READY);
if (playWhenReady) {
startRenderers();
}
}
} else if (state == ExoPlayer.STATE_READY) {
boolean isStillReady = enabledRenderers.length > 0 ? allRenderersReadyOrEnded
: isTimelineReady(playingPeriodDurationUs);
if (!isStillReady) {
rebuffering = playWhenReady;
setState(ExoPlayer.STATE_BUFFERING);
stopRenderers();
}
}
...
whew setState:
private void setState(int state) {
if (this.state != state) {
this.state = state;
eventHandler.obtainMessage(MSG_STATE_CHANGED, state, 0).sendToTarget();
}
}
然后:
void handleEvent(Message msg) {
switch (msg.what) {
case ExoPlayerImplInternal.MSG_STATE_CHANGED: {
playbackState = msg.arg1;
for (EventListener listener : listeners) {
listener.onPlayerStateChanged(playWhenReady, playbackState);
}
break;
}
...
似乎我们可以通过这种方式获得playbackState?
答案 1 :(得分:0)
private lateinit var player: SimpleExoPlayer
player = ExoPlayerFactory.newSimpleInstance(this)
player.addListener(object : Player.EventListener {
override fun onPlayerStateChanged(playWhenReady: Boolean, playbackState: Int) {
if (playbackState == Player.STATE_BUFFERING) {
videoProgress.visibility = View.VISIBLE
} else {
videoProgress.visibility = View.GONE
}
}
您可以在进度条的帮助下使用Player.STABUFFERING通知用户是否正在缓冲视频,并在状态更改时将其隐藏。
答案 2 :(得分:0)
我知道现在回答还为时已晚,但是如果有人仍在寻找答案,那么ExoPlayer已经提供了回调以标识播放器的播放状态。
EventListener接口提供了一种称为onPlaybackStateChanged()
的方法,该方法提供有关播放器状态的更新。
EventLogger已经实现了这一点,在日志猫中,您在播放流时可能会在下面的日志中找到
D EventLogger: state [0.00, true, I]
D EventLogger: state [0.01, true, B]
D EventLogger: state [3.09, true, R]
其中I代表STATE_IDLE,B代表STATE_BUFFERING,R代表STATE_READY。 您可能要实现Player.EventListener以便在播放器缓冲时得到通知。 播放器停止播放流时,还会记录一个称为STATE_ENDED的状态。
我相信这个link将为您提供更多信息。