AVFoundation을 사용하여 비디오를 레코딩하려고합니다. 세션에만 비디오 입력을 추가하면 모든 것이 잘 작동하지만 오디오 입력을 추가하면 비디오 녹화가 중단됩니다. (녹음이 시작되면 즉시 대리자 메서드가 호출됩니다.) 여기 내 코드 :AVFoundation을 사용한 비디오 레코딩
-(void) recordVideo
{
self.session = [[AVCaptureSession alloc] init];
if([session canSetSessionPreset:AVCaptureSessionPresetMedium])
session.sessionPreset = AVCaptureSessionPresetMedium;
CALayer *viewLayer = [self.cameraView layer];
AVCaptureVideoPreviewLayer *captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];
captureVideoPreviewLayer.frame = viewLayer.bounds;
[viewLayer addSublayer:captureVideoPreviewLayer];
self.videoInput = [AVCaptureDeviceInput deviceInputWithDevice:[self frontFacingCameraIfAvailable] error:nil];
self.audioInput = [AVCaptureDeviceInput deviceInputWithDevice:[self audioDevice] error:nil];
if(!videoInput)
NSLog(@"Couldn't create input!");
else
{
self.output= [[AVCaptureMovieFileOutput alloc] init];
NSString *pathString = [[self outputPath]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *fileURL = [NSURL fileURLWithPath:pathString];
[session beginConfiguration];
[session removeInput:[self videoInput]];
if([session canAddInput:videoInput])
[session addInput:videoInput];
[videoInput release];
[session removeInput:[self audioInput]];
if([session canAddInput:audioInput])
[session addInput:audioInput];
[audioInput release];
if([session canAddOutput:output])
[session addOutput:output];
[output release];
[session commitConfiguration];
[session startRunning];
[output startRecordingToOutputFileURL:fileURL recordingDelegate:self];
}
- (void) captureOutput:(AVCaptureFileOutput *)captureOutput didStartRecordingToOutputFileAtURL:(NSURL *)fileURL fromConnections:(NSArray *)connections
{
NSLog(@"Recording Started at %@",fileURL);
}
- (void)captureOutput:(AVCaptureFileOutput *)captureOutput didFinishRecordingToOutputFileAtURL:(NSURL *)outputFileURL
fromConnections:(NSArray *)connections error:(NSError *)error
{
NSLog(@"Recording to file ended");
[session stopRunning];
[session release];
}
- (AVCaptureDevice *)frontFacingCameraIfAvailable
{
NSArray *videoDevices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
AVCaptureDevice *captureDevice = nil;
for (AVCaptureDevice *device in videoDevices)
{
if (device.position == AVCaptureDevicePositionBack)
{
captureDevice = device;
break;
}
}
return captureDevice;
}
- (AVCaptureDevice *) audioDevice
{
NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeAudio];
if ([devices count] > 0) {
return [devices objectAtIndex:0];
}
return nil;
}
난 [출력 stopRecording]을 호출 어떤 일정 시간 후하지만 오디오 입력을 추가 할 때 단일 프레임 기록하고 didFinishRecroding 위임 방법 즉시 호출된다.
누구든지이 코드에 무슨 문제가 있는지 말해 줄 수 있습니까?
감사합니다.
델리게이트 함수에서 사용할 수있는 오류가 있습니까? NSLog (@ "% @", error); 그리고 어떤 경우 여기에 게시 할 수 있습니까? –
그것은 말합니다 : 오류 도메인 = AVFoundationErrorDomain 코드 = -11818 "녹음 중지됨"UserInfo = 0x197dd0 {NSLocalizedRecoverySuggestion = 녹음 장치를 사용하여 다른 작업을 중지하고 다시 시도하십시오., NSLocalizedDescription = 녹음 중지} – shujaat
아무도 ??????? – shujaat