【发布时间】:2012-02-19 17:44:21
【问题描述】:
我有一个 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 的输入。
我希望有人能指出我正确的解决方案。有什么建议或方向吗?
谢谢!
【问题讨论】:
标签: iphone ios avfoundation