2015-11-05 63 views
4

如何在Swift中重新關聯AVPlayerItem的實例與新的AVPlayer?在初始化程序中使用時。即使在我將AVPlayer的所有引用設置爲nil(因此它應該被垃圾收集)之後,每次我嘗試重新分配AVPlayerItem到不同的AVPlayer時,它都會抱怨AVPlayerItem不能分配給多於1個AVPlayer對象。我瞭解一些方法來解決它,但我想知道爲什麼這種的方式不起作用。在Swift中將AVPlayerItem與新的AVPlayer聯繫起來?

let player: AVPlayer = AVPlayer(playerItem: somePlayerItem) 

我不知道該聲明中會發生什麼,但一些地方被設置成允許somePlayerItem知道它有關聯的球員。這是否有一些觀察員設置某處或屬性集可以注意到這一點?

有沒有人知道在原始AVPlayer的引用已被破壞之後,將此AVPlayerItem重新分配到不同的AVPlayer的方法?我知道我可以使用URL創建一個新的AVPlayerItem,但我想知道是否可以保留相同的對象。

+0

您是否嘗試過使用替換當前項:replaceCurrentItemWithPlayerItem:?爲什麼你需要與其他玩家一起使用物品? – Davyd

+0

這將工作。看起來很奇怪,聲明的AVPlayerItem是一次性使用的。爲什麼你不能只將視頻存儲在AVPlayerItem中並將其顯示在不同的AVPlayers中? – snowman4839

+0

AVPlayerItem不存儲視頻,它引用AVAsset,所以它應該是相當輕量級的包裝。 – Davyd

回答

1

您無法重複使用項目,但可以重複使用資產。

因此,創建您的資產一旦:

let asset=AVAsset(URL: your_url) 

然後再用它在需要時通過創建一個新項目:

let item=AVPlayerItem(asset: asset) 
let player=AVPlayer(playerItem: item) 
相關問題