如何使用 AVPlayer 获得无缝播放?

问题描述 投票:0回答:0

我正在尝试连续播放文件,中间没有间隙。我尝试的第一件事是使用

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
不感兴趣。)

swift avplayer avplayeritem avqueueplayer
© www.soinside.com 2019 - 2024. All rights reserved.