gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 05:20:56 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com