title: Video Recording using AVFoundation
body: <p>I am trying to record video using AVFoundation. When I add video input only to the session, everything works fine but when I add an audio input to it, it stops recording the video.(Delegate method is called immediately after recording starts). Here is my code:</p>
  
  <pre><code>-(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] &gt; 0) {
      return [devices objectAtIndex:0];
   }
   return nil;
  }
  </code></pre>
  
  <p>I call [output stopRecording] after some fixed time but when I add an audio input it records a single frame and didFinishRecroding delegate method is called immediately.</p>
  
  <p>Can anybody tell me whats wrong with this code.</p>
  
  <p>Thanks</p>