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