【问题标题】:Record audio while recording OpenGL view录制 OpenGL 视图时录制音频
【发布时间】: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


    【解决方案1】:

    我正在做的是:

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

    希望这会有所帮助。

    【讨论】:

    • 我试过了,效果很好,谢谢!但是我正在寻找一种在录制时混合两者的方法,我会再等一会儿,以防有人有答案,否则我会接受你的答案。
    • 在这种情况下,恐怕您将无法使用 AVAudioRecorder 捕获音频。该类始终将音频记录到文件中。您需要将音频存储在内存中并即时制作作品,或类似的东西。不知道这是否可能。你看过 iOS SpeakHere 的例子吗?
    猜你喜欢
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    • 2022-07-12
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多