AVPlayer не работает с AVPlayerItemStatusFailed (ошибка OSStatus -12983)

Иногда 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];

Ответ 1

Проблема в том, что эта строка безусловна:

[self.layer addSublayer:avPlayerLayer];

Таким образом, вы каждый раз добавляете новый слой игрока. Таким образом, вы накапливаете много слоев игроков. Это не верно. Должно быть только одно. Содержите ссылку на старый слой игрока и удалите его перед добавлением слоя игрока или, если это тот же самый плеер, что и раньше, и он уже имеет связанный с ним уровень игрока в интерфейсе, ничего не делайте.

Ответ 2

Создайте sharedInstance из AVPlayer с playerItem = nil. В следующий раз замените толькоPlayerItem.

Ответ 3

Это иногда случалось в iOS-симуляторе,
попробуйте перезапустить симулятор снова может работать.:)