AVAssetWriter startWriting Cannot call method when status is 3

gpuimage, ios, video-processing

Solution

Check your destination file is exist.

If exist, remove the exist file.

Problem

I am working with Video filtering.I used GPUImage from BradLarson. It perfect work on Images, but now I am trying to filter video file from Library it give me error `[AVAssetWriter startWriting] Cannot call method when status is 3`. I used IOS7 heare is my code ``` - (void)viewDidLoad { [super viewDidLoad]; videoEditingPlayView = [[GPUImageView alloc] initWithFrame:CGRectMake(60,108,200,200)]; [self.view addSubview:videoEditingPlayView]; } -(IBAction)btnEffectsClick:(id)sender{ NSURL *videoURl = [NSURL fileURLWithPath:self.strVideoURl]; if (movieFile != nil) { videoFilter = nil; movieFile = nil; } movieFile = [[GPUImageMovie alloc] initWithURL:videoURl]; movieFile.runBenchmark = YES; videoFilter = [[GPUImageBrightnessFilter alloc] init]; [(GPUImageBrightnessFilter *)videoFilter setBrightness:0.0]; [movieFile addTarget:videoFilter]; videoEditingPlayView.hidden = NO; GPUImageView *filterView = (GPUImageView *)videoEditingPlayView; [videoFilter addTarget:filterView]; NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Movie.m4v"]; NSURL *movieURL = [NSURL fileURLWithPath:pathToMovie]; movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(480, 360)]; [videoFilter addTarget:movieWriter]; // movieWriter. movieWriter.shouldPassthroughAudio = YES; movieFile.audioEncodingTarget = movieWriter; [movieFile enableSynchronizedEncodingUsingMovieWriter:movieWriter]; [filterView setFillMode:kGPUImageFillModePreserveAspectRatio]; filterView.transform = CGAffineTransformRotate(filterView.transform, 3.14159/2); double delayToStartRecording = 0.5; dispatch_time_t startTime = dispatch_time(DISPATCH_TIME_NOW, delayToStartRecording * NSEC_PER_SEC); dispatch_after(startTime, dispatch_get_main_queue(), ^(void){ NSLog(@"Start recording"); [movieWriter startRecording]; **[movieFile startProcessing];** ***if I remove this line then it is working but not dispying video on videoEditingPlayView*** double delayInSeconds = 30.0; dispatch_time_t stopTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); dispatch_after(stopTime, dispatch_get_main_queue(), ^(void){ [filter removeTarget:movieWriter]; [movieWriter finishRecording]; [videoFilter removeTarget:movieWriter]; movieWriter = nil; NSLog(@"Movie completed"); }); }); } ``` in coding if I remove this line `[movieFile startProcessing]`; then app run smoothly, but not displaying video. if I put `[movieFile startProcessing]` then it crash and give me a error. I tried this one but can't solved crash. GPUImage terminates due to [AVAssetWriter startWriting] Cannot call method when status is 3' https://github.com/BradLarson/GPUImage/issues/1228 Blends with GPUImageView are not giving expected result GPUImageMovieWriter - crashing with "Cannot call method when status is 2" And also other. Thanks.

Original source

Related problems