【发布时间】:2016-01-24 03:21:46
【问题描述】:
我在我的应用程序中使用AVQueuePlayer。我有两个滑动手势可以跳到下一个并跳到上一个 avplayeritems。现在要跳到下一个,我只是在 avqueueplayer 上调用AdvanceToNextItem,效果很好。
但是跳到上一个我要删除所有项目并将它们重新添加到前面的视频中,当多次跳到上一个时这真的很慢。我怎样才能像调用advanceToNextItem 一样加快速度?
我的代码如下所示:
func skipToPrevious() {
queuePlayer.removeAllItems()
// move the previous playerItem to the front of the list then add them all back in
for playerItem in playerItems:
queuePlayer.insertItem(playerItem, afterItem: nil)
}
【问题讨论】:
-
我也面临这个问题有一段时间了。在用户点击上一个项目时,我已经诉诸于重新创建队列播放器。然后我使用延迟函数和屏幕上的进度条,让队列播放器有至少 1.0 秒的时间来重新创建队列并缓冲该项目的一部分。当然,这并不能解决您想要更快速度的问题。我会多挖一点。
-
到目前为止我发现的最好的方法是在播放完成后将 avplayeritem 保存在内存中,这样它就已经被缓冲了,然后就像我在问题中所做的那样重新插入项目,而不是重新创建队列一起来。
-
一个想法 -> 当一个项目正在播放时,将当前正在播放的项目存储在变量中并将其加载到 AVPlayer 中。当用户点击快退时,您可以立即播放 AVPlayer,然后您可以简单地在后台暂停和快退 AVQueuePlayer,这样当 AVPlayer 完成时,队列播放器就可以开始了……有点hacky 当然
-
github.com/dgiovann/AVQueuePlayerPrevious ...有点老了,但这可能对你有帮助
标签: ios swift avqueueplayer avplayeritem