ios - 使用 AVQueuePlayer 跳到上一个的更好方法?

标签 ios swift avqueueplayer avplayeritem

我正在我的应用程序中使用 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)

}

最佳答案

似乎 AVQueuePlayer 在调用 advanceToNextItem 时从播放队列中删除了当前项目。理论上,如果不重建队列,就无法取回该项目。

你可以做的是使用一个标准的 AVPlayer,有一个 AVPlayerItems 数组,以及一个保存当前轨道的索引的整数索引。

swift 3:

let player = AVPlayer()
let playerItems = [AVPlayerItem]() // your array of items
var currentTrack = 0

func previousTrack() {
    if currentTrack - 1 < 0 {
        currentTrack = (playerItems.count - 1) < 0 ? 0 : (playerItems.count - 1)
    } else {
        currentTrack -= 1
    }

    playTrack()
}

func nextTrack() {
    if currentTrack + 1 > playerItems.count {
        currentTrack = 0
    } else {
        currentTrack += 1;
    }

    playTrack()
}

func playTrack() {

    if playerItems.count > 0 {
        player.replaceCurrentItem(with: playerItems[currentTrack])
        player.play()
    }
}

swift 2.x:

func previousTrack() {
    if currentTrack-- < 0 {
        currentTrack = (playerItems.count - 1) < 0 ? 0 : (playerItems.count - 1)
    } else {
        currentTrack--
    }

    playTrack()
}

func nextTrack() {
    if currentTrack++ > playerItems.count {
        currentTrack = 0
    } else {
        currentTrack++;
    }

    playTrack()
}

func playTrack() {

    if playerItems.count > 0 {
        player.replaceCurrentItemWithPlayerItem(playerItems[currentTrack])
        player.play()
    }
}

关于ios - 使用 AVQueuePlayer 跳到上一个的更好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34971839/

相关文章:

javascript - 在 iPhone 上检测 “Done” 以获取 YouTube/Vimeo 视频(退出全屏)

ios - 可扩展的 UICollectionViewCell

ios - 预加载 AVPlayer 流式视频

ios - 当应用程序处于后台时播放音频或声音

ios - ios中滚动问题的NavigationController子ViewController中的PageViewController

iphone - 在 iPhone 上的 Facebook 上分享来自 bundle 和链接的图像

ios - 访问 ObjC 类中的参数化 swift 方法

swift - `sum` 测量序列扩展

swift - 如何在 swift 中将转义键指定为等同于按钮的键?

ios - AVQueuePlayer 的属性