搜索完成后Android exoplayer回调

时间:2016-07-18 07:24:10

标签: android progress seek exoplayer

我在Android上使用exoplayer。我需要在视频搜索时显示进度指示器。我可以开始在seekTo方法上显示进度指示器,但是当搜索完成时我应该使用哪种回调方法来隐藏进度指示器。

3 个答案:

答案 0 :(得分:2)

实施ExoPlayer.EventListener。方法onPlayerStateChanged。当playbackState == ExoPlayer.STATE_READY然后隐藏您的进度指示器。

答案 1 :(得分:0)

onSeekProcessed(),您将在Player.EventListener中得到它。

答案 2 :(得分:0)

简短回答:听@Sough 并使用 EventListener.onPlaybackStateChangedSTATE_READY

长话:

onSeekProcessed() 起初听起来很完美,但自 ExoPlayer v2.12.0 起已弃用,并附有以下评论:

<块引用>

@deprecated 搜索会立即处理。听 #onPositionDiscontinuity(int) 改为#DISCONTINUITY_REASON_SEEK。

所以 onPositionDiscontinuity(int) 应该与原因 DISCONTINUITY_REASON_SEEK 一起使用。

不知何故,这让我想知道这是否真的会在搜索完成并且视频准备好继续播放时没有任何延迟(如“onSeekProcessed”)。因为,从语义上讲,开始搜索的那一刻可能已经被解释为位置不连续(如“立即处理搜索”)。

事实上,当您查看我在运行时情况下测量的事件时间时,事情变得显而易见:

  0ms - <Seek initiated>
  1ms - onPositionDiscontinuity -> DISCONTINUITY_REASON_SEEK
  2ms - onPlaybackStateChanged -> STATE_BUFFERING
  4ms - onSeekProcessed
208ms - onPlaybackStateChanged -> STATE_READY

这表明用 onPlaybackStateChangedSTATE_READY 仍然是最好的选择。

结论:onSeekProcessed 听起来不错,但它做错了。因此它已被弃用,并提供了替代方案。不幸的是不是预期的事情。棘手但真实。