我有一个 OpenGL View ,我正在使用 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 View 的快照,将其转换为 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
的输入。
我希望有人能指出我正确的解决方案。有什么建议或指示吗?
谢谢!
最佳答案
我正在做的是:
- 使用 AVAudioRecorder 将音频录制到文件中。
- 使用 AVMutableComposition 连接视频和音频轨道。
- 将视频读入 AVURLAsset 变量。
- 将音频文件读入 AVURLAsset 变量。
- 将每个 AVURLAsset 添加到 AVMutableCompositionTrack 中。
- 导出组合,瞧...
希望这对您有所帮助。
关于iphone - 在录制 OpenGL View 时录制音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9021383/