使用第二个 AVPlayer 缓冲下一首歌曲

Buffering the next song using a second AVPlayer

我想播放歌曲列表,但由于自定义队列系统,我不想使用 AVQueuePlayer 来实现歌曲之间的无缝过渡(不必等待下一首歌曲播放) load/buffer) 我想创建第二个播放器来加载队列中的下一首歌曲并将其分配给主播放器,这是一个合法的解决方案吗?

像这样:

var player = AVPlayer()
var nextSongPlayer = AVPlayer()
//...
func playSong() {
   let playerItem = AVPlayerItem(url: "URL1")
   player.replaceCurrentItem(with: playerItem)
   //...
   let player = AVPlayerItem(url: "URL2")
   nextSongPlayer.replaceCurrentItem(with: player)
   //...
   player.play()
}

func nextSong() {
   player = nextSongPlayer
   player = play
}

或者我应该用第二个 URL 创建一个 AVPlayerItem 并用它替换当前的层叠项目?或者有更好的解决方案?

代码几乎是正确的,我让 tp 创建一个新的 AVPlayer 并将其分配给 nextSongPlayer:

//...
let playerItem = AVPlayerItem(url: "URL2")
let tempPlayer = AVPlayer()
tempPlayer.replaceCurrentItem(with: player)
tempPlayer.play() // Makes the player buffer the song
tempPlayer.pause() 
self. nextSongPlayer = tempPlayer()
//...