我正在嘗試使用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(@「%@」,錯誤);'如果有一些帖子在這裏? –
它說:錯誤域= AVFoundationErrorDomain代碼= -11818「記錄停止」UserInfo = 0x197dd0 {NSLocalizedRecoverySuggestion =停止使用記錄設備的任何其他操作,並再試一次,NSLocalizedDescription =記錄停止} – shujaat
任何人??????? – shujaat