我正在尝试使用 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;
}
我在一段固定时间后调用 [output stopRecording],但是当我添加音频输入时,它会记录一个帧,并立即调用 didFinishRecroding 委托方法。
谁能告诉我这段代码有什么问题。
Thanks
我已经想通了。我需要类别混合。以下是制作它的代码:
NSError *setCategoryError = nil;
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayAndRecord error: &setCategoryError];
if (setCategoryError) { NSLog(@"%@",[setCategoryError description]); }
OSStatus propertySetError = 0;
UInt32 allowMixing = true;
propertySetError = AudioSessionSetProperty ( kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof (allowMixing), &allowMixing);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)