2016-03-28 7 views
0

Я пытаюсь ограничить размер AVAssetExportSession до 10mb. Без установки fileLengthLimit, «Экспорт завершен». После установки fileLengthLimit = 10*1024*1024 «Ошибка экспорта: невозможно открыть».Установка `fileLengthLimit` из` AVAssetExportSession` вызывает: «Ошибка экспорта: невозможно открыть»

- (void) splitVideo{ 
    AVURLAsset *videoAsset = [AVURLAsset URLAssetWithURL:output options:nil]; 
    CMTime videoDuration = videoAsset.duration; 

    CMTime start = CMTimeMakeWithSeconds(0, 1); 
    CMTimeRange range = CMTimeRangeMake(start, videoDuration); 

    NSString *outputPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"output1.mp4"]; 
    [self cutVideo:output withRange:range withOutput:outputPath]; 
} 

- (void) cutVideo:(NSURL *)url withRange:(CMTimeRange)range withOutput:(NSString*)path{ 

    AVAsset *asset = [[AVURLAsset alloc] initWithURL:url options:nil]; 
    NSArray *compatiblePresets = [AVAssetExportSession exportPresetsCompatibleWithAsset:asset]; 
    if ([compatiblePresets containsObject:AVAssetExportPresetHighestQuality]) { 
     AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] 
              initWithAsset:asset presetName:AVAssetExportPresetPassthrough]; 

     NSURL *finalUrl = [NSURL fileURLWithPath:path]; 
     exportSession.outputURL = finalUrl; 
     exportSession.outputFileType = AVFileTypeMPEG4; 
     exportSession.fileLengthLimit = 10*1024*1024; 
     exportSession.timeRange = range; 

     [exportSession exportAsynchronouslyWithCompletionHandler:^{ 
      dispatch_async(dispatch_get_main_queue(), ^{ 

      }); 
      if ([exportSession status] == AVAssetExportSessionStatusCompleted){ 
       NSLog(@"Export completed"); 
      }else if ([exportSession status] == AVAssetExportSessionStatusFailed){ 
       NSLog(@"Export failed: %@", [[exportSession error] localizedDescription]); 
      }else if ([exportSession status] == AVAssetExportSessionStatusCancelled){ 
       NSLog(@"Export canceled"); 
      } 
      }]; 
    } 
} 

Видео экспортируется около 25Мб.

ответ

0

я заменил

AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetPassthrough] 

с:

AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetHighestQuality]; 

AVAssetExportPresetPassthrough - «Этот вариант экспорта приведет к СМИ всех треков, которые передаются на выход точно, хранящегося в источнике актив "

 Смежные вопросы

  • Нет связанных вопросов^_^