10

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

3 回答 3

7

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

[self.layer addSublayer:avPlayerLayer];

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

于 2014-05-25T11:28:31.540 回答
0

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

于 2017-07-26T10:36:56.480 回答
0

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

于 2018-01-11T07:13:12.507 回答