Tyl*_*ler 14 ios avqueueplayer swift 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)
}
Run Code Online (Sandbox Code Playgroud)
JAL*_*JAL 21
这似乎是AVQueuePlayer
在调用时从播放队列中删除当前项目advanceToNextItem
.从理论上讲,如果不重建队列,就无法恢复此项目.
你可以做的是使用一个标准AVPlayer
,一个数组AVPlayerItems
和一个整数索引来保持当前轨道的索引.
斯威夫特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()
}
}
Run Code Online (Sandbox Code Playgroud)
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()
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4934 次 |
最近记录: |