2014-07-25 4 views
0

카메라의 수신 스트림을 필터링하고 나중에 저장하기 위해 iOS 용으로 인상적인 GPUImage 프레임 워크를 사용하고 있습니다. 완료되면 포함 된보기를 닫고 방금 촬영 한 영화를 볼 수있는 재생 옵션이있는 다른보기를 열고 싶습니다. 문제는 아무것도하지 않으면 녹화를 끝내고 파일을 임시 파일에 저장 한 다음 카메라 롤에 동시에 복사 할 수 있습니다. 그러나 입력 사운드 및 필터를 사용하면 GPUImageMovieWriter가 너무 느려 보이고 비디오의 시작 부분이나 끝 부분에 빈 프레임이 생깁니다. GPUImageMovieWriter는 사운드 입력 및 비디오 카메라의 필터를 사용할 때 빈 프레임으로 비디오를 생성합니다.

는 필터와 물건을 설정하고 난 할 라이브 필터링 된 이미지의 미리보기를 만들려면 :

videoCamera=[[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPresetiFrame960x540 cameraPosition:AVCaptureDevicePositionBack]; 
movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:outputURL size:CGSizeMake(self.view.frame.size.width, self.view.frame.size.height)]; 
movieWriter.encodingLiveVideo = YES; 
movieWriter.shouldPassthroughAudio = YES; 
videoCamera.audioEncodingTarget = movieWriter; 

_filteredVideoView = [[GPUImageView alloc]initWithFrame:CGRectMake(0.0, 0.0, self.view.frame.size.width, self.view.frame.size.height)]; 
[self.view addSubview:_filteredVideoView]; 

blendFilter = [[GPUImageNormalBlendFilter alloc]init]; 
sourcePicture = [[GPUImagePicture alloc] initWithCGImage:[mc getImage]]; 
[sourcePicture processImage]; 

[blendFilter addTarget:_filteredVideoView]; 
[videoCamera blendFilter]; 
[videoCamera startCameraCapture]; 

outputURL 엠씨 같은 모든 변수가 모두 제대로 설정됩니다.

[blendFilter addTarget:movieWriter]; 
[movieWriter startRecording]; 

녹음을 중지하고이 코드가 카메라 롤에 저장 :

videoCamera.audioEncodingTarget = nil; 
[movieWriter finishRecording]; 
[blendFilter removeTarget:movieWriter]; 
UISaveVideoAtPathToSavedPhotosAlbum(outputPath, nil, NULL, NULL); 
[self gotoNextView]; 

아마 파일이 프레임을 통해 오는 전에 기록 시작을하고, 나는이 전화를 실제 녹음을 시작하려면/또는 임시 파일이 쓰여지고있는 동안 파일이 카메라 롤로 복사 중입니다. 어떻게하면 모든 것이 파일에 저장되는지 확인하고 완료되면 알림을 받으면서 다음보기로 이동할 수 있습니까?

답변

0
 [self.movieWriter finishRecordingWithCompletionHandler:handler] 

완료 처리기 블록에 저장하는 비디오 코드는 녹화가 완료 될 때까지 대기합니다.