如何从AVPlayerItem断开AVPlayer?

时间:2016-06-22 04:09:54

标签: ios avfoundation avplayer

我想重复使用AVPlayerItem,但一直收到此错误:

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

您可以通过创建新的Single View应用程序来运行它,并使用该代码取代ViewController实现。

1 个答案:

答案 0 :(得分:4)

您无法断开AVPlayerItems。我想指向播放器的私有属性并不弱,因此通过将当前播放器项设置为NULL来取消引用该项不会自动将项的播放器属性设置为NULL ..

只需创建一个新的。使用URL,在这种情况下,缓存系统将立即返回一个AVAsset(只是另一个猜测......),或者更好的是,你想要“断开”的PlayerItem的资产。

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

这样做没有性能损失。该项目只是资产的“句柄”,其中包含真实的数据。因此,不要害怕垃圾并随时创建新物品。