【问题标题】:AVPlayer fails with AVPlayerItemStatusFailed (OSStatus error -12983)AVPlayer 因 AVPlayerItemStatusFailed 失败(OSStatus 错误 -12983)
【发布时间】:2014-07-14 01:27:54
【问题描述】:

有时 AVPlayer 会以 AVPlayerItemStatusFailed 失败,而在该失败发生后,AVPlayer 会继续以 AVPlayerItemStatusFailed 失败。我试图清除 AVPlayer 实例并创建一个新的,但我无法实现 AVPlayerItemStatusFailed 失败解决。还 removingFromSuperview UIView 使用 AVPlayer 实例并使用 AVPlayer 初始化新项目并不能解决问题。

所以我发现 AVPlayer 无法完全清除。有没有人建议尝试完全清除 AVPlayer 并使其在失败后工作?

错误日志:

Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo=0x1a689360 {NSLocalizedDescription=The operation could not be completed, NSUnderlyingError=0x1a688e70 "The operation couldn’t be completed. (OSStatus error -12983.)", NSLocalizedFailureReason=An unknown error occurred (-12983)}

UPD。 对于@matt

playerItem = [AVPlayerItem playerItemWithURL:[NSURL fileURLWithPath:filePath.path]];

if (!self.avPlayer) {
  avPlayer = [AVPlayer playerWithPlayerItem:playerItem];
}

[avPlayer.currentItem addObserver:self forKeyPath:@"status" options:0 context:nil];

if (self.avPlayer.currentItem != self.playerItem) {
  [self.avPlayer replaceCurrentItemWithPlayerItem:playerItem];
}

AVPlayerLayer *avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:avPlayer];
avPlayerLayer.frame = self.bounds;
[self.layer addSublayer:avPlayerLayer];

avPlayer.actionAtItemEnd = AVPlayerActionAtItemEndNone;

[avPlayer play];

【问题讨论】:

  • 显示你的代码 - 你首先用来尝试玩的代码。
  • @matt 感谢您的回答,我在上面添加了我的代码。
  • filePath.path 有没有可能是坏的?也许出来为零?
  • @matt 链接始终是 mp4 文件,电影始终在 Web 和模拟器中播放,但并不总是在设备上。

标签: ios avfoundation avplayer avplayerlayer avplayeritem


【解决方案1】:

问题是这条线是无条件的:

[self.layer addSublayer:avPlayerLayer];

因此,您每次都添加一个新的播放器层。因此,您正在堆积许多播放器层。这是错误的。必须只有一个。保留对旧播放器层的引用并在添加播放器层之前将其删除,或者,如果这与之前的播放器相同,并且界面中已经有关联的播放器层,则什么也不做。

【讨论】:

  • 还要确保您没有保留 AVPlayer、AVPlayerLayer 或 AVPlayerItem 的任何对象。在我的情况下,我使用 [player addPeriodicTimeObserverForInterval:] 来获取定期间隔。它保留了 AVPlayer。相反,我使用了 NSTimer 并在需要时将其无效
  • 我使用符号断点来确保 AVPlayer 被正确释放,并且我只使用了 AVPlayerLayer 的 1 个实例,但有时会发生错误(iOS 8 有一个错误,它不会恢复播放器,所以我必须重启播放器),这是为什么呢
【解决方案2】:

使用 playerItem = nil 创建 AVPlayer 的 sharedInstance。 下次只替换ThePlayerItem。

【讨论】:

    【解决方案3】:

    它有时会发生在 iOS 模拟器中,
    尝试再次重新启动模拟器可能会起作用。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-01
      • 1970-01-01
      • 2019-02-10
      • 2019-02-18
      • 1970-01-01
      • 2016-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多