18

Tengo mi aplicación configurada para grabar video de la cámara usando una sesión AVCapture, sin embargo, no hay audio con ella. ¿Qué debo hacer para grabar audio y luego agregarlo al video Salida para el archivo? Aquí está mi código para la grabación del video:AVCaptureSession Grabar video con audio

AVCaptureSession *session = [[AVCaptureSession alloc] init]; 
[session beginConfiguration]; 
session.sessionPreset = AVCaptureSessionPresetMedium; 

CALayer *viewLayer = self.vImagePreview.layer; 
NSLog(@"viewLayer = %@", viewLayer); 

AVCaptureVideoPreviewLayer *captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session]; 
captureVideoPreviewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; 
captureVideoPreviewLayer.frame = self.vImagePreview.bounds; 

[self.vImagePreview.layer addSublayer:captureVideoPreviewLayer]; 

AVCaptureDevice *device = [self frontFacingCameraIfAvailable]; 

NSError *error = nil; 
AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error]; 
if (!input) { 
    // Handle the error appropriately. 
    NSLog(@"ERROR: trying to open camera: %@", error); 
} 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectoryPath = [paths objectAtIndex:0]; 

AVCaptureMovieFileOutput *movieFileOutput = [[AVCaptureMovieFileOutput alloc] init]; 

NSString *archives = [documentsDirectoryPath stringByAppendingPathComponent:@"archives"]; 
NSString *outputpathofmovie = [[archives stringByAppendingPathComponent:@"Test"] stringByAppendingString:@".mp4"]; 
NSURL *outputURL = [[NSURL alloc] initFileURLWithPath:outputpathofmovie]; 

[session addInput:input]; 
[session addOutput:movieFileOutput]; 
[session commitConfiguration]; 
[session startRunning]; 
[movieFileOutput startRecordingToOutputFileURL:outputURL recordingDelegate:self]; 

que añade otra entrada para el audio, pero no lo puedo trabajar con el MPMoviePlayerController que está en el fondo. ¿Hay algún pensamiento sobre algo que pueda reproducir un video y simultáneamente grabar audio y video desde una cámara?

+0

@MDT así que lo que se supone que debo hacer? Si va a tomarse el tiempo para publicar un enlace, ¿por qué no convertirlo en un enlace a lo que cree que me va a ayudar? – user717452

+0

Ver el último párrafo agregado para editar – user717452

Respuesta

28

no se ha incluido el dispositivo de audio:

AVCaptureDevice *audioDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio]; 
AVCaptureDeviceInput * audioInput = [AVCaptureDeviceInput deviceInputWithDevice:audioDevice error:nil]; 
[session addInput:audioInput] 

entre beginConfiguration y commitConfiguration. ¡Funcionará!

+1

por alguna razón, cuando agrego AudioInput y comienzo a grabar, la vista previa se congela y el archivo de salida de video sigue informando 0 segundos de metraje grabado ... tan pronto como comento el audio, comienza a funcionar nuevamente :( – Moonwalker

7

ADD más adelante código entre beginConfiguration() y commitConfiguration()

// Add audio device to the recording 

let audioDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeAudio) 
do { 
    let audioInput = try AVCaptureDeviceInput(device: audioDevice) 
    self.captureSession.addInput(audioInput) 
} catch { 
    print("Unable to add audio device to the recording.") 
} 
+0

La pregunta es sobre ObjectiveC no Swift – NSNoob

+2

pero tiene una respuesta actualizada para hoy. –

Cuestiones relacionadas