Ошибка -11800 при попытке вставить TimeRange из AVComposition в AVMutableComposition

Я работаю с AVFoundation, используя только аудио, то есть без видео, и пытаюсь соединить несколько AVComposition вместе, один за другим, чтобы получить один единственный AVComposition.

Пример: всего два AVComposition. Каждый из них отлично играет, создав AVPlayer таким образом:

_player = [AVPlayer playerWithPlayerItem:[AVPlayerItem playerItemWithAsset:comp]]

где comp является экземпляром AVMutableComposition. (Кстати, стоит отметить, что _player должен быть иваром, иначе ARC преждевременно выпускает его до того, как он проиграет — потребовалось некоторое время, чтобы отследить его.)

Это хорошо - выполнение

[_player play]

приводит к успешному воспроизведению comp.

Однако это не удается:

(self.segments — это NSMutableArray, содержащий элементы, которые являются пользовательским подклассом AVMutableComposition)

AVMutableComposition *comp = [AVMutableComposition composition];
NSError *err;
for (AVMutableComposition* c in self.segments) {
    [comp insertTimeRange:CMTimeRangeMake(kCMTimeZero, segment.duration)      
                  ofAsset:segment atTime:comp.duration error:&err];
    DLog(@"Error was %@", segment, err);
}

Для каждого элемента self.segments при выполнении этого кода я получаю эту ошибку при вызове метода insertTimeRange:::::

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

Я не могу найти никакой информации о том, на что указывает эта ошибка - кажется, это просто уловка - и я не вижу, что я делаю неправильно. Любые идеи?


person jf_by_the_sea    schedule 05.03.2014    source источник
comment
Я только что попытался использовать цикл for и objectAtIndex: вместо быстрого перечисления по NSMutableArray self.segments, и это ничем не отличается.   -  person jf_by_the_sea    schedule 06.03.2014
comment
Вы когда-нибудь догадывались об этом? Я сталкиваюсь с очень похожими проблемами (однако с видео, а не только со звуком - номера ошибок также немного отличаются AVFoundationErrorDomain Code=-11801 и (OSStatus error -12786.))   -  person Hugo    schedule 09.10.2014
comment
попробуйте использовать :fileURLWithPath вместо :urlwithstring   -  person Nik    schedule 23.12.2015


Ответы (3)


Эта ошибка кода соответствует AVErrorUnknown = -11800, поэтому нет особых объяснений причины проблемы. https://developer.apple.com/documentation/avfoundation/averror/averrorunknown?language=objc

На всякий случай, если это может помочь кому-то еще, я укажу здесь свою причину.

Контекст

В моем случае я получал ошибку при попытке подключиться к Airplay.

Причина

Причина в том, что у меня есть 2 экземпляра AVPlayer. Один для видео типа фильма, а другой для предварительного просмотра. Затем, когда я пытался запустить фильм... AVFoundation запутался и выдал эту ошибку.

Решение

В экземпляре moviePlayback:

allowsExternalPlayback = true
usesExternalPlaybackWhileExternalScreenIsActive = true

На экземпляре default:

allowsExternalPlayback = false
usesExternalPlaybackWhileExternalScreenIsActive = false
person TomCobo    schedule 15.01.2021

В моем случае CMTimeRange был неверным, а продолжительность == 0. Это связано с тем, что CMTimeMake преобразует ввод в целое число и теряет точность.

Чтобы решить эту проблему, я использовал большую временную шкалу.

Код проблемы:

CMTime startTime = CMTimeMake(timeStamp.begin, 1);
CMTime duration = CMTimeMake(timeStamp.duration, 1);

Правильный код:

CMTime startTime = CMTimeMake(timeStamp.begin*1000, 1000);
CMTime duration = CMTimeMake(timeStamp.duration*1000, 1000);

то работает нормально.

[videoTrack insertTimeRange:CMTimeRangeMake(startTime, duration) ofTrack:videoTracks.firstObject atTime:kCMTimeZero error:&error];
person Feng    schedule 26.10.2015

Убедитесь, что segment.asset не выпущен. Таким образом, если условие segment.asset == nil истинно, данные мультимедиа исчезли, поэтому действие вставки завершилось неудачно.

ссылка: https://www.jianshu.com/p/089f6691dbdb (в нижней части статья)

person Quanhua Guan    schedule 16.03.2018