我有一个ExoPlayer实例和一个搜索栏。当用户搜索时,我想使用ExoPlayer.seekTo()
来更新视频的位置。
您是否可以根据需要随时拨打ExoPlayer.seekTo()
,如果尚未完成,它应该处理取消之前的seekTo()
次请求?或者我们是否必须阻止自己过度调整seekTo()
?
由于
答案 0 :(得分:1)
您可以根据需要随时调用ExoPlayer.seekTo()吗,如果尚未完成,它应该处理取消之前的seekTo()请求吗?或者我们是否必须自己防止过度搜索seekTo()?
我想你可以。
不取消之前的搜索请求。 实际上,在搜索过程中至少涉及三个线程。
一旦内部回放线程完成了搜索动作的处理,它就可以安排 doSomeWork 的动作,该动作试图查看是否有要渲染(或跳过)的解码帧。 最后,当渲染搜索目标时,您可以看到显示的搜索目标的时刻。
简而言之,一旦先前的搜索操作(例如ExoPlayer.seekTo())已将相应的消息发送到internalPlaybackThread的消息队列,您可以再次按下(传递)下一个搜索。搜索操作是序列化,并由内部回放线程按顺序处理。
一旦内部回放线程检索到寻道消息&处理了它。加载线程开始加载。如果你下载,demux&解码速度足够快以及在下一次搜索之前有一个doSomeWork,你可以看到搜索结果。 否则,下一次搜索将停止加载&再次寻求(在这种情况下,看起来好像先前的搜索是 取消 )。
结果,它取决于您在内部提供连续搜索操作和执行顺序的速度。