首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在录制OpenGL视图时录制音频

在录制OpenGL视图时录制音频
EN

Stack Overflow用户
提问于 2012-01-27 00:23:11
回答 1查看 846关注 0票数 1

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

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

代码语言:javascript
复制
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将其添加到编写器输入中

代码语言:javascript
复制
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的输入。

我希望有人能给我指出正确的解决方案。有什么建议或方向吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-27 04:02:04

我要做的是:

  1. 使用AVAudioRecorder将音频录制到文件中。
  2. 使用AVMutableComposition来连接视频和音频轨道。
  3. 将视频读取到AVURLAsset变量中。
  4. 将音频文件读取到AVURLAsset变量中。
  5. 将每个AVURLAsset添加到AVMutableCompositionTrack.
  6. Export中,然后...

希望这能有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9021383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档