2016-03-28 18 views
0

AVAssetExportSession boyutunu 10mb ile sınırlamaya çalışıyorum. fileLengthLimit ayarı yapılmadan "Dışa Aktarım Tamamlandı". fileLengthLimit = 10*1024*1024 ayarlandıktan sonra "Dışa aktarma başarısız: Açamıyor". videolar ihraç edilen `AVAssetExportSession` dosyasının` fileLengthLimit 'ayarı: "Dışa aktarılamadı: Açılamıyor"

- (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"); 
      } 
      }]; 
    } 
} 

25MB etrafında bulunmaktadır.

cevap

0

Birlikte

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

değiştirilir:

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

AVAssetExportPresetPassthrough - "kaynak depolanan gibi bu dışa aktarma seçeneği tüm parçaların medya çıkışı tam için geçirilecek neden olur varlık "