Запись звука во время записи OpenGL. - PullRequest
1 голос
/ 26 января 2012

У меня есть представление OpenGL, в котором я записываю видео, используя то, что объясняется в этом отличном сообщении в блоге.Кроме того, я хотел бы записать звук с микрофона и смешать его с видео.

Первым решением, которое я придумал, было что-то вроде этого (для ясности я пропустил некоторый код):

writer = [[AVAssetWriter alloc]initWithURL:[NSURL fileURLWithPath:filePath] fileType:AVFileTypeMPEG4 error:&error];

audioWriterInput = [AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeAudio outputSettings:audioOutputSettings]; 
videoWriterInput = [AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeAudio outputSettings:videoSettings];

[writer addInput:audioWriterInput];
[writer addInput:videoWriterInput];
[writer startWriting];

Я создаю два входа, один аудио, один видеои начать писать.Каждый раз, когда кадр отображается, я получаю снимок представления OpenGL, преобразую его в CVPixelBufferRef и добавляю его к входу модуля записи, используя AVAssetWriterInputPixelBufferAdaptor:

CVPixelBufferRef buffer = NULL;
float millisecondsElapsed = [[NSDate date] timeIntervalSinceDate:startRecordingDate] * 1000.0;
buffer = [self pixelBufferFromCGImage:[shot CGImage] size:shot.size];  
BOOL addedToBuffer = [bufferAdaptor appendPixelBuffer:buffer withPresentationTime:CMTimeMake(millisecondsElapsed, 1000)];

Теперь моя проблема заключается в том, чтоЯ не знаю, как получить аудиопакеты с микрофона в AVAssetWriterInput, и я не знаю, как правильно синхронизировать оба.Я смотрел на AVAssetReader, но он не может понять, как получить звук с микрофона.Также я думал о чтении из файла, в который AVAudioRecorder пишет, но я не знаю, как читать из него и конвертировать эти пакеты в CMSampleBufferRef.Что тогда будет входом для AVAssetWriterInput.

Я надеюсь, что кто-то может указать мне на правильное решение.Любые предложения или направления?

Спасибо!

1 Ответ

2 голосов
/ 27 января 2012

То, что я делаю, это:

  1. Запись звука с помощью AVAudioRecorder в файл.
  2. Используйте AVMutableComposition для объединения видео и звуковых дорожек.
  3. Считайте видео в переменную AVURLAsset.
  4. Считайте аудиофайл в переменную AVURLAsset.
  5. Добавьте каждый AVURLAsset в AVMutableCompositionTrack.
  6. Экспорт файласостав и вуаля ...

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...