18

У меня есть приложение, предназначенное для записи видео с камеры с помощью 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

+0

См. Добавленный последний абзац для редактирования – user717452

ответ

28

Вы не включили аудиоустройство:

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

между beginConfiguration и commitConfiguration. Это сработает !!!

+1

по какой-то причине, когда я добавляю AudioInput и начинаю запись, предварительный зависание и выходной видеофайл сохраняют отчетность в 0 секунд записанных кадров ... как только я прокомментирую аудиовыход, он снова начнет работать :( – Moonwalker

7

Добавить ниже код между 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

+2

, но у него есть обновленный ответ на сегодня. –

Смежные вопросы