Ios 将AVPlayerItem与Swift中的新AVPlayer关联?

Ios 将AVPlayerItem与Swift中的新AVPlayer关联?,ios,swift,avplayer,avplayeritem,Ios,Swift,Avplayer,Avplayeritem,如何在Swift中将AVPlayerItem的实例与新的AVPlayer重新关联?在初始值设定项中使用时。每次我尝试将AVPlayerItem重新分配给不同的AVPlayer时,即使我将AVPlayer的所有引用设置为nil(因此它应该被垃圾收集),它也会抱怨AVPlayerItem不能分配给多个AVPlayer对象。我知道有几种方法可以解决这个问题,但我想知道为什么这种方法行不通 let player: AVPlayer = AVPlayer(playerItem: somePlayerIte

如何在Swift中将
AVPlayerItem
的实例与新的
AVPlayer
重新关联?在初始值设定项中使用时。每次我尝试将
AVPlayerItem
重新分配给不同的
AVPlayer
时,即使我将
AVPlayer
的所有引用设置为
nil
(因此它应该被垃圾收集),它也会抱怨
AVPlayerItem
不能分配给多个
AVPlayer
对象。我知道有几种方法可以解决这个问题,但我想知道为什么这种方法行不通

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


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

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

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

let asset=AVAsset(URL: your_url)
然后在需要时通过创建新项目重新使用它:

let item=AVPlayerItem(asset: asset)
let player=AVPlayer(playerItem: item)

是否尝试使用:replaceCurrentItemWithPlayerItem:替换当前项?那你为什么还要在其他玩家身上使用一件物品呢?那就行了。声明的AVPlayerItem是一次性使用,这似乎很奇怪。为什么不能将视频存储在AVPlayerItem中并在不同的AVPlayerItem中显示?AVPlayerItem不存储视频,它引用了一个AVAsset,因此它应该是一个非常轻量级的包装。因此它确实有助于存储AVAsset,而不是存储AVPlayerItem。我只是想知道是否有任何方法可以更改该AVPlayerItem的关联播放器。[oldPlayer replacementCurrentItemWithPlayerItem:nil];