安卓ExoPlayer seek完成时的回调函数

14

我正在使用Android上的exoplayer。当视频正在查找时,我需要显示进度指示器。 我可以在seekTo方法上开始显示进度指示器,但是在查找完成后应使用哪个回调方法隐藏进度指示器呢?

3个回答

6

实现 ExoPlayer.EventListener 接口。其中有一个方法 onPlayerStateChanged。当 playbackState == ExoPlayer.STATE_READY 时,隐藏进度指示器。


6

简短回答:听从@Sough的建议,使用EventListener.onPlaybackStateChangedSTATE_READY

详细解释:

一开始看起来onSeekProcessed()非常完美,但是从ExoPlayer v2.12.0版本开始,它已被废弃,并带有以下注释:

@deprecated Seeks are processed without delay. Listen to #onPositionDiscontinuity(int) with reason #DISCONTINUITY_REASON_SEEK instead.

因此应该使用带有原因DISCONTINUITY_REASON_SEEKonPositionDiscontinuity(int)

这让我想知道当寻求完成并准备好继续播放时(即“onSeekProcessed”),这是否会真正触发。因为语义上,寻求启动的那一刻就可以被解释为位置不连续(即“Seeks are processed without delay”)。

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

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

这表明,使用STATE_READY监听onPlaybackStateChanged仍然是最佳选择。

结论:虽然onSeekProcessed听起来不错,但它做了错误的事情。因此,它已经被弃用,并提供了一种替代方案。不幸的是,这个替代方案并不能实现预期的功能。棘手但真实。


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接