【发布时间】:2016-07-18 07:24:10
【问题描述】:
我在 Android 上使用 exoplayer。我需要在视频搜索时显示进度指示器。我可以开始在 seekTo 方法上显示进度指示器,但是当搜索完成时我应该使用哪个回调方法来隐藏进度指示器。
【问题讨论】:
标签: android progress seek exoplayer
我在 Android 上使用 exoplayer。我需要在视频搜索时显示进度指示器。我可以开始在 seekTo 方法上显示进度指示器,但是当搜索完成时我应该使用哪个回调方法来隐藏进度指示器。
【问题讨论】:
标签: android progress seek exoplayer
实现ExoPlayer.EventListener。有一个方法onPlayerStateChanged。当playbackState == ExoPlayer.STATE_READY 然后隐藏你的进度指示器。
【讨论】:
简答:收听@Sough 并使用EventListener.onPlaybackStateChanged 和STATE_READY。
长篇大论:
onSeekProcessed() 起初听起来很完美,但自 ExoPlayer v2.12.0 起已弃用,并带有以下评论:
@deprecated Seek 会立即处理。听 #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
这表明用STATE_READY 收听onPlaybackStateChanged 仍然是最好的选择。
结论:onSeekProcessed 听起来确实不错,但它做错了事。因此它已被弃用,并提供了替代方案。不幸的是,这不是预期的事情。棘手但真实。
【讨论】:
onSeekProcessed(),你会在Player.EventListener得到这个。
【讨论】: