我有基于KVO
. 但是,除了自动播放之外,我还想使用NSButton
. 因此,如果我Next Video
在我的序列自动播放时按下按钮,此操作会将我推进到队列中的下一个剪辑。但它没有以正确的方式工作。
问题是:当队列结束时,队列中的所有剪辑都没有循环。只有第一个剪辑有一个循环(如果我按下Next Video
按钮 10 次 -只有第一个剪辑循环 10 次),之后所有剪辑都会正常自动播放。
问题:如何(在推进时)使用 NSButton 循环播放所有视频?
这是我的代码:
import Cocoa
import AVFoundation
import AVKit
class ViewController: NSViewController {
@IBOutlet weak var avPlayerView: AVPlayerView!
@IBOutlet weak var nextVideoButton: NSButton!
@objc private let player = AVQueuePlayer()
let clips = ["One", "Two", "Three", "Four"]
private var token: NSKeyValueObservation?
override func viewDidAppear() {
super.viewDidAppear()
addAllVideosToPlayer()
}
func addAllVideosToPlayer() {
avPlayerView.player = player
for clip in clips {
let urlPath = Bundle.main.path(forResource: clip, ofType: "mov")!
let url = URL(fileURLWithPath: urlPath)
let playerItem = AVPlayerItem(url: url)
player.insert(playerItem, after: player.items().last)
token = player.observe(\.currentItem) { [weak self] player, _ in
if self!.player.items().count == 1 { self?.addAllVideosToPlayer() }
}
player.play()
avPlayerView.controlsStyle = .none
}
}
@IBAction func nextVideo(_ sender: Any) {
var number: Int = 0
let clip = clips[number]
let urlPath = Bundle.main.path(forResource: clip, ofType: "mov")!
let url = URL(fileURLWithPath: urlPath)
let playerItem = AVPlayerItem(url: url)
player.insert(playerItem, after: player.items().last)
player.advanceToNextItem()
number += 1
if number >= clips.count {
number = 0
player.advanceToNextItem()
number += 1
}
}
}
这是我的视图控制器: