录制OpenGL视图时录制音频

时间:2012-01-26 16:23:11

标签: iphone ios avfoundation

我有一个OpenGL视图,我正在使用this精彩博文中的解释录制视频。除此之外,我想从麦克风录制音频并将其与视频混合。

我提出的第一个解决方案是这样的(为了清楚起见,我省略了一些代码):

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 个答案:

答案 0 :(得分:2)

我正在做的是:

  1. 使用AVAudioRecorder将音频录制到文件中。
  2. 使用AVMutableComposition加入视频和音轨。
  3. 将视频读入AVURLAsset变量。
  4. 将音频文件读入AVURLAsset变量。
  5. 将每个AVURLAsset添加到AVMutableCompositionTrack。
  6. 导出作文并vo ...
  7. 希望这有帮助。