如何从 AVPlayerItem 断开 AVPlayer?

Cba*_*bas 2 avfoundation ios 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;
Run Code Online (Sandbox Code Playgroud)

为什么 AVPlayerItem 仍然关联,我该如何断开它?

这是一个完整重现问题的要点(顺便说一句,只有 50 行):https : //gist.github.com/sbiermanlytle/14a6faab515f7691b810789086ae9e50

您可以通过创建一个新的 Single View 应用程序并用该代码替换 ViewController 实现来运行它。

Moo*_*ose 9

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

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

AVPlayerItem* newPlayerItem = [AVPlayerItem playerItemWithAsset:playerItem.asset];
Run Code Online (Sandbox Code Playgroud)

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