18

Ho la mia app configurata per registrare video dalla telecamera usando una AVCaptureSession, tuttavia non c'è audio con esso. Cosa devo fare per registrare l'audio e quindi aggiungerlo al videoOutput per il file? Ecco il mio codice per la registrazione del video:AVCaptureSession Registra 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]; 

ho aggiunto un altro ingresso per l'audio, ma non funzionerà con la MPMoviePlayerController che è in background. Ci sono pensieri per qualcosa che potrebbe riprodurre un video e registrare contemporaneamente audio e video da una telecamera?

+0

@MDT così che cosa dovrei fare? Se hai intenzione di prendere tempo per pubblicare un link, perché non renderlo un link a ciò che pensi possa aiutarmi? – user717452

+0

Per alcuni motivi, aggiunto l'ultimo paragrafo per la modifica – user717452

risposta

28

Non hai inserito il dispositivo audio:

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

tra beginConfiguration e commitConfiguration. Funzionerà !!!

+1

, quando aggiungo AudioInput e avvio la registrazione, l'anteprima si blocca e il file di output video continua a riportare 0 secondi di filmati registrati ... non appena commento l'audio, riprende a funzionare di nuovo :( – Moonwalker

7

Aggiungi sotto codice tra beginConfiguration() e 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 domanda riguarda ObjectiveC non Swift – NSNoob

+2

ma ha una risposta aggiornata per oggi. –

Problemi correlati