AVAssetExportSession не работает для определенных видео

Я пытаюсь объединить видео и аудио с помощью AVAssetExportSession и AVMutableComposition. Мой код работает в большинстве случаев (аудио и видео). Но для некоторых видео это не удается. Неудачные видео отлично работают с QuickTime Player и другими плеерами. Неудачные видео не работают, когда я просто экспортирую даже без какой-либо опции аудиомеринга (код приведен ниже).

[AVURLAsset assetWithURL:[NSURL fileURLWithPath:videoPath]];
AVAssetExportSession* _assetExport = [[AVAssetExportSession alloc] initWithAsset:videoAsset presetName:AVAssetExportPresetHighestQuality];
NSURL    *exportUrl = [NSURL fileURLWithPath:exportPath];
if ([[NSFileManager defaultManager] fileExistsAtPath:exportPath])
{
    [[NSFileManager defaultManager] removeItemAtPath:exportPath error:nil];
}

_assetExport.outputFileType = @"com.apple.quicktime-movie";
_assetExport.outputURL = exportUrl;
_assetExport.shouldOptimizeForNetworkUse = YES;
[_assetExport exportAsynchronouslyWithCompletionHandler:
 ^(void ) {
     if (AVAssetExportSessionStatusCompleted == _assetExport.status) {
     } else if (AVAssetExportSessionStatusFailed == _assetExport.status) {
         NSLog(@"AVAssetExportSessionStatusFailed with error--%@", _assetExport.error);
     }
 }
 ];

И у меня получилась следующая ошибка ..

Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo={NSUnderlyingError=0x600000053aa0 {Error Domain=NSOSStatusErrorDomain Code=-12769 "(null)"}, NSLocalizedFailureReason=An unknown error occurred (-12769), NSLocalizedDescription=The operation could not be completed}

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

Любые подсказки или подсказки с кодами ошибок будут действительно полезны. Заранее спасибо.


person jjpp    schedule 15.03.2017    source источник
comment
похоже, -12769 это kCMBufferQueueError_InvalidBuffer   -  person Rhythmic Fistman    schedule 16.03.2017
comment
Спасибо за информацию ! Откуда вы это взяли, пожалуйста?   -  person Xys    schedule 01.06.2017
comment
@xys Я ищу в osstatus.com или с помощью grep в файлах заголовков CoreMedia / CoreAudio / AVFoundation   -  person Rhythmic Fistman    schedule 17.03.2020


Ответы (3)


Я решил эту проблему, используя предустановку экспорта AVAssetExportPresetPassthrough

let exportSession = AVAssetExportSession(asset: composition, presetName: AVAssetExportPresetPassthrough)

Это должно использовать разрешение импортированного видео в экспортируемом файле.

person Ashley Mills    schedule 28.02.2018

Сначала проверьте, какой кодек использовался для сжатия этого видео.

person lee jason    schedule 15.03.2017
comment
Есть один пост, похожий на вашу проблему. Сначала проверьте stackoverflow.com/questions/24576808/osstatus-error-12769 - person lee jason; 17.03.2017
comment
У меня такая же проблема, и для меня кодировщик Lavf57.61.100 - person Xys; 01.06.2017

Похоже, что установка предустановки экспорта на "AVAssetExportPreset1280x720", например, решает проблему. Но в моем случае мне действительно нужно сохранить исходное разрешение, так что это не вариант ..

person Xys    schedule 01.06.2017