2014-09-23 5 views
1

Я пытаюсь обрезать существующий видеоролик и повторно сохранять клип в том же месте, что и исходный файл. Однако, когда я запускаю мое приложение, я получаю эту ошибку:Ошибка экспорта видеоролика: «Неверный тип выходного файла» в объекте-c

Нагрузочное приложение из-за неперехваченное исключение «NSInvalidArgumentException», причина: «Недопустимый типа выходного файла»

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

Это то, что я до сих пор:

AVMutableComposition *finalClip = [[AVMutableComposition alloc]init]; 

NSString *outputPath = [[NSString alloc] initWithFormat:@"%@%@", NSTemporaryDirectory(), @"output.mov"]; 

NSURL *outputURL = [[NSURL alloc] initFileURLWithPath:outputPath]; 

AVURLAsset *videoclip = [AVURLAsset URLAssetWithURL:outputURL options:nil]; 

AVMutableCompositionTrack *finalClipTrack = [finalClip addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; 

[finalClipTrack insertTimeRange:CMTimeRangeMake(CMTimeMake((duration*indexNum), 1), CMTimeMake(duration,1)) ofTrack:[[videoclip tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:kCMTimeZero error:nil]; 

NSString *outputPathwe = [[NSString alloc] initWithFormat:@"%@%@", NSTemporaryDirectory(), @"outputwe.mov"]; 

NSURL *outputURLwe = [[NSURL alloc] initFileURLWithPath:outputPathwe]; 

if ([[NSFileManager defaultManager] fileExistsAtPath:outputPathwe]) 
    [[NSFileManager defaultManager] removeItemAtPath:outputPathwe error:nil]; 

AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:finalClip presetName:AVAssetExportPresetHighestQuality]; 

exporter.outputFileType = AVMediaTypeVideo; 

exporter.outputURL=outputURLwe; 

[exporter exportAsynchronouslyWithCompletionHandler:^{ 

    dispatch_async(dispatch_get_main_queue(), ^{ 

     [self exportDidFinish:exporter]; 

    }); 
}]; 

Я чувствую, что это что-то очень простое, что я просто не хватает. Это мой первый опыт использования AVFoundation, поэтому любая помощь будет оценена!

ответ

3

AVMediaTypeVideo - это «тип носителя», а не «тип выходного файла». В вашем исходном видео есть треков, которые имеют тип AVMediaTypeVideo. Исходное видео не относится к типу AVMediaTypeVideo.

outputFileType AVAssetExportSession - это константы типа NSString. Разрешенные значения перечислены в AVFoundation/AVMediaFormat.h. Для видео, они:

  • AVFileTypeQuickTimeMovie
  • AVFileTypeMPEG4
  • AVFileTypeAppleM4V

Вы должны выбрать одно из допустимых значений использовать для AVAssetExportSession «ы outputFileType.

+0

Благодарим вас за разъяснение этого для меня! – kkimble006