18

Ich habe meine App eingerichtet, um Videos von der Kamera mit AVCaptureSession aufzunehmen, es ist jedoch kein Ton dabei. Was muss ich tun, um Audio aufzunehmen und dann dem VideoOutput für die Datei hinzuzufügen? Hier ist mein Code zur Aufzeichnung des Video:AVCaptureSession Video mit Audio aufzeichnen

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]; 

ich einen anderen Eingang für das Audio hinzugefügt, aber es funktioniert gewohnt mit dem MPMoviePlayerController, die im Hintergrund ist. Gibt es irgendwelche Gedanken an etwas, das ein Video abspielen und gleichzeitig Audio und Video von einer Kamera aufnehmen könnte?

+0

@MDT so was ich tun soll? Wenn Sie sich die Zeit nehmen, einen Link zu posten, warum nicht einen Link zu dem herstellen, von dem Sie glauben, dass er mir helfen wird? – user717452

+0

Siehe hinzugefügt letzten Absatz zum Bearbeiten – user717452

Antwort

28

Sie haben nicht das Audiogerät enthalten:

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

zwischen beginConfiguration und commitConfiguration. Es wird funktionieren !!!

+1

aus irgendeinem Grund, wenn ich AudioInput hinzufügen und Aufnahme starten, die Vorschau einfriert und Video-Output-Datei meldet 0 Sekunden von aufgezeichnetem Material ... sobald ich das Audio auskommentieren, beginnt es wieder zu arbeiten :( – Moonwalker

7

unten Code hinzufügen zwischen beginConfiguration() und 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

Frage geht um ObjectiveC nicht Swift – NSNoob

+2

, aber er hat eine aktualisierte Antwort für heute. –

Verwandte Themen