iphone - 在录制 OpenGL View 时录制音频

标签 iphone ios avfoundation

我有一个 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 的输入。

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

谢谢!

最佳答案

我正在做的是:

  1. 使用 AVAudioRecorder 将音频录制到文件中。
  2. 使用 AVMutableComposition 连接视频和音频轨道。
  3. 将视频读入 AVURLAsset 变量。
  4. 将音频文件读入 AVURLAsset 变量。
  5. 将每个 AVURLAsset 添加到 AVMutableCompositionTrack 中。
  6. 导出组合,瞧...

希望这对您有所帮助。

关于iphone - 在录制 OpenGL View 时录制音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9021383/

相关文章:

ios - 在主线程上分派(dispatch) NSNotification 或在主线程上传递通知哪个更好

ios - 在 SpriteKit 中设置布局约束

ios - 如何在 AVCaptureVideoPreviewLayer 上添加叠加层?

iphone - 如何在用户不触摸 UIWebView 本身的情况下启动 YouTube 视频?

ios - 如何从 Sandbox 切换到 In App purchase

iphone - Sharekit:在发布到 Facebook 时修改了 url?

iphone - 更改搜索栏中的键盘颜色和外观

ios - Xcode 11.3 在 macOS Catalina 10.15 中启动时崩溃

Swift ImagePicker 开始视频捕获

ios - 使用 AVMutableVideoComposition 导出时出现视频方向问题