我正在尝试连续播放文件,中间没有间隙。我尝试的第一件事是使用
AVQueuePlayer
:
let player = AVQueuePlayer()
let playerItem1 = ...
let playerItem2 = ...
player.insert(playerItem1, after: nil)
player.insert(playerItem2, after: nil)
player.play()
效果很好,完全符合预期。但是,
AVQueuePlayer
有一些缺点,我决定使用 AVPlayer
和自定义队列实现。我面临的问题是,虽然 AVQueuePlayer
是 AVPlayer
的子类,但我无法让 AVPlayer
成为无间隙的。以下是代码的设置方式:
let playerItem1 = ...
let playerItem2 = ...
let player = AVPlayer(playerItem: playerItem1)
NotificationCenter.default.addObserver(self, selector: #selector(playerDidFinishPlaying), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: player.currentItem)
player.play()
@objc func playerDidFinishPlaying() {
player.replaceCurrentItem(with: nextPlayerItem)
player.play()
}
如您所见,我通过
AVPlayerItemDidPlayToEndTime
通知检测到第一个项目的播放结束,然后开始播放第二个项目。但是通过这种实现,两项之间存在差距。
我怎样才能改变它,让它表现得更像
AVQueuePlayer
,没有间隙?
(请注意,我目前对使用
AVAudioEngine
不感兴趣。)