Próbuję nagrać wideo za pomocą AVFoundation. Kiedy dodaję wejście wideo tylko do sesji, wszystko działa dobrze, ale kiedy dodaję do niego wejście audio, przestaje nagrywać wideo. (Metoda Delegata jest wywoływana natychmiast po rozpoczęciu nagrywania). Tu jest mój kodu:Nagrywanie wideo za pomocą 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;
}
Wzywam [Wyjście stopRecording] po pewnym określonym czasie, ale kiedy dodać wejście audio zapisuje pojedynczy rama i sposób didFinishRecroding delegat nazywa się natychmiast.
Czy ktoś może mi powiedzieć, co jest nie tak z tym kodem.
Dzięki
Czy jest jakiś błąd dostępny w funkcji delegata? Czy możesz 'NSLog (@"% @ ", error);' a na wypadek, gdyby było trochę postu tutaj? –
Mówi: Error Domain = AVFoundationErrorDomain Code = -11818 "Nagrywanie zatrzymane" UserInfo = 0x197dd0 {NSLocalizedRecoverySuggestion = Zatrzymaj wszelkie inne czynności z użyciem urządzenia nagrywającego i spróbuj ponownie., NSLocalizedDescription = Nagrywanie zatrzymane} – shujaat
Ktoś ??????? – shujaat