2016-06-22 39 views
0

我要重用AVPlayerItem但不斷收到此錯誤:如何從AVPlayerItem斷開AVPlayer?

An AVPlayerItem cannot be associated with more than one instance of AVPlayer

想重新使用它之前,我破壞了以前的AVPlayer是這樣的:

[self.player pause]; 
[self.player replaceCurrentItemWithPlayerItem:nil]; 
self.player = nil; 

爲什麼仍然是相關的AVPlayerItem以及如何斷開它?

這裏是問題的一個完整的再現(僅50行BTW)一個要點是:https://gist.github.com/sbiermanlytle/14a6faab515f7691b810789086ae9e50

您可以通過創建一個新的單一視圖的應用程序,並且排擠掉了的ViewController執行該代碼運行。

回答

2

您無法斷開AVPlayerItems。我認爲指向玩家的私人屬性並不弱,所以通過將當前玩家項目設置爲NULL來取消引用項目不會自動將該玩家的屬性設置爲NULL。

只需創建一個新項目。無論是使用URL,在這種情況下,緩存系統會立即返回一個AVAsset(只是另一個猜測......),或者更好的是,您要「斷開連接」的PlayerItem的資產。

AVPlayerItem* newPlayerItem = [AVPlayerItem playerItemWithAsset:playerItem.asset]; 

這樣做沒有性能損失。該項目只是資產的「處理」,其中包含真實的數據。所以,不要害怕在飛行中垃圾和創造新物品。

相關問題