AVCaptureSession录制带有音频的视频

问题描述:

我有我的应用程序设置为使用AVCaptureSession从相机录制视频,但是,它没有音频。我需要做什么来录制音频,然后将其添加到文件的videoOutput中?这里是我的录制视频代码:AVCaptureSession录制带有音频的视频

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

我又增加了输入音频,但它不会与在背景中的MPMoviePlayerController工作。对于可以播放一个视频并同时记录来自相机的音频和视频的内容,有什么想法吗?

+0

@MDT所以之间那我该怎么办?如果你打算花时间发布一个链接,为什么不把它作为你认为会帮助我的链接呢? – user717452 2012-04-27 19:25:48

+0

由于某种原因,我添加了最后一段的编辑 – user717452 2012-04-27 21:51:08

您还没有包括音频设备:

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

beginConfigurationcommitConfiguration之间。它会工作!

+1

,当我添加AudioInput并开始录制时,预览冻结并且视频输出文件持续报告0秒的录制视频......只要我将音频注释掉,它就会重新开始工作:( – Moonwalker 2013-07-09 18:39:32

添加下面的代码beginConfiguration()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

问题是关于ObjectiveC不是Swift – NSNoob 2016-08-15 09:43:23

+2

,但他有一个今天更新的答案。 – 2017-11-13 08:10:47