将 AVPlayerItem 与 Swift 中的新 AVPlayer 关联?

sno*_*839 4 ios avplayer swift avplayeritem

如何在 Swift 中将的实例AVPlayerItem与 new重新关联AVPlayer?在初始化程序中使用时。每次我试图重新分配AVPlayerItem到不同的AVPlayer我已经设置所有引用即使AVPlayernil(所以它应该得到收集的垃圾),它抱怨说,一个AVPlayerItem不能被分配到超过1个AVPlayer对象。我了解一些绕过它的方法,但我想知道为什么这种方法不起作用。

let player: AVPlayer = AVPlayer(playerItem: somePlayerItem)
Run Code Online (Sandbox Code Playgroud)

我不知道在这个声明过程中会发生什么,但是某处设置了一些东西来允许 somePlayerItem 知道它有一个关联的玩家。这是否在某处设置了一些观察者或设置了会注意到这一点的属性?

有没有人知道在原始引用被销毁后将其重新分配AVPlayerItem给不同的方法?我知道我可以使用 URL创建一个新对象,但我想知道是否可以保留相同的对象。AVPlayerAVPlayerAVPlayerItem

Mar*_* Dm 6

您不能重复使用项目,但可以重复使用资产。

因此,创建您的资产一次:

let asset=AVAsset(URL: your_url)
Run Code Online (Sandbox Code Playgroud)

然后在需要时通过创建一个新项目来重用它:

let item=AVPlayerItem(asset: asset)
let player=AVPlayer(playerItem: item)
Run Code Online (Sandbox Code Playgroud)