AVPlayer因AVPlayerItemStatusFailed失败(OSStatus错误-12983)

时间:2014-05-24 22:46:46

标签: ios avfoundation avplayer avplayerlayer avplayeritem

有时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];

3 个答案:

答案 0 :(得分:7)

问题是这一行是无条件的:

[self.layer addSublayer:avPlayerLayer];

因此,您每次都要添加一个新的播放器图层。因此,你正在堆积许多玩家层。这是错的。必须只有一个。保持对旧玩家图层的引用并在添加玩家图层之前删除它,或者,如果这是与之前相同的玩家,并且它已经在界面中具有关联的玩家图层,则不执行任何操作。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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