Ошибка 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];

person instback    schedule 24.05.2014    source источник
comment
Покажите ваш код — код, который вы используете, чтобы попытаться играть в первую очередь.   -  person matt    schedule 25.05.2014
comment
@matt Спасибо за ваш ответ, я добавил свой код выше.   -  person instback    schedule 25.05.2014
comment
Есть шанс, что filePath.path плохой? Может выйти ноль?   -  person matt    schedule 25.05.2014
comment
@matt Ссылка всегда представляет собой файл mp4, фильм всегда воспроизводится в Интернете и в симуляторе, но не всегда на устройстве.   -  person instback    schedule 25.05.2014


Ответы (3)


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

[self.layer addSublayer:avPlayerLayer];

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

person matt    schedule 25.05.2014
comment
Также убедитесь, что вы не сохраняете какие-либо объекты AVPlayer, AVPlayerLayer или AVPlayerItem. В моем случае я использовал [player addPeriodicTimeObserverForInterval:] для получения периодических интервалов. он сохранял AVPlayer. Вместо этого я использовал NSTimer и аннулировал его при необходимости. - person Qamar Suleiman; 07.01.2015
comment
Я использую символическую точку останова, чтобы убедиться, что AVPlayer освобожден правильно, и я использую только 1 экземпляр AVPlayerLayer, но эта ошибка иногда возникает (в iOS 8 есть ошибка, которая не возобновляет проигрыватель, поэтому я должен перезапустить проигрыватель), почему что - person onmyway133; 30.01.2015

Создайте общий экземпляр AVPlayer с playerItem = nil. В следующий раз замените только ThePlayerItem.

person sonali    schedule 26.07.2017

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

person Johnny    schedule 11.01.2018