2017-10-27 2 views
0

にフィルタを適用するとき、私は関数によってAVVideoCompositionにフィルタを適用する:assetAVCompositionで、これでクラッシュAVVideoComposition

init(asset: AVAsset, applyingCIFiltersWithHandler: (AVAsynchronousCIImageFilteringRequest) -> Void)

AVPlayerItemがエラーとvideoComposition、アプリがクラッシュすると、この構図を果たしているとき:

reason: '*** -[AVCoreImageFilterCustomVideoCompositor startVideoCompositionRequest:] Expecting video composition to contain only AVCoreImageFilterVideoCompositionInstruction'

は私がクラッシュを修正する方法を疑問に思います。

PS:私は、組成物中に2 videoTracksを持って、それぞれの時間範囲は、私はあなたがAVVideoCompositionにAVVideoCompositionLayerInstructionを追加しようとしていると思いますその命令

答えて

0

を持っています。

最初の単純なアプローチを試してみて、あなたはすべての変更を必要とするかどうかを確認:

AVURLAsset *asset = [AVURLAsset assetWithURL:videoURL]; 
CIFilter *filter = [CIFilter filterWithName:@"CIHueAdjust"]; // the filter you want to add: https://developer.apple.com/library/content/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/filter/ci/ 
AVMutableVideoComposition *videoComposition = [AVMutableVideoComposition videoCompositionWithAsset:asset applyingCIFiltersWithHandler:^(AVAsynchronousCIImageFilteringRequest * _Nonnull request) { 
    // set filter input image 
[filter setDefaults]; 
    [filter setValue:sourceImage forKey:kCIInputImageKey]; 

    // hue 
    NSNumber *angle = [NSNumber numberWithFloat:0.8]; 
    [filter setValue:angle forKey:kCIInputAngleKey]; 

    CIImage *outputImage = filter.outputImage; 
    [request finishWithImage:outputImage context:nil]; 
}]; 

AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPreset1920x1080]; 
exportSession.outputFileType = AVFileTypeQuickTimeMovie; 
exportSession.outputURL = outputURL; 
exportSession.videoComposition = videoComposition; 

// export the session async 
[exportSession exportAsynchronouslyWithCompletionHandler:^{ 
    switch (exportSession.status) { 
     case AVAssetExportSessionStatusCompleted: 
      NSLog(@"Yeah!"); 
      break; 

     default: 
      NSLog(@"Nooo!"); 
      break; 
    } 
}];