安卓:同时录制原始音频和视频

3
我开发了一款基于声音和视频记录的Android应用程序。我希望在预览和录制视频和声音时,能够在耳机中实时播放麦克风音频。目前已经可以单独完成以下工作:
1)使用Superpowered库记录音频并实时播放它(在预览和录制过程中)。在幕后,它通过将缓冲区推送到输出(耳机)来直接使用C++执行AudioRecord的工作。其目标是实时对原始声音应用音频效果。
2)使用mediaRecorder捕获视频。
当音频播放正在运行时,我尝试启动视频录制,但启动时崩溃。
E/MediaRecorder: start failed: -2147483648

我想不能同时启动两个录音进程。我认为使用AudioRecord或Superpowered库来处理原始音频是一个不错的方法,但我无法想出如何在不与当前音频录制冲突的情况下录制视频。

那么有没有办法实现我的功能呢?

(minSdk 16)


我成功地使用MediaRecorder录制了同时包含视频和音频的内容(无需为视频设置audioSource,避免了在api16下使用MediaMuxer时出现的复杂性),并且使用我的Superpowered库来处理音频。最后,我使用ffmpeg将两个文件合并。 - ddp
1个回答

2
根据 bigflake 的介绍,MediaCodec 类在 Android 4.1(API 16)中首次推出。它被添加以允许直接访问设备上的媒体编解码器。
在 Android 4.3(API 18)中,MediaCodec 被扩展以包括通过 Surface 提供输入的方法(通过 createInputSurface 方法)。这允许输入来自相机预览或 OpenGL ES 渲染。
因此,如果可能,请考虑将 MinSDK 增加到 18,并使用 AudioVideoRecordingSampleHWEncoderExperiments 作为示例。

我成功地使用MediaCodec在SurfaceView上获取了相机的预览,这是一个不错的开始。为了记录,我将同时写入文件。通常情况下,我的音频部分也可以同时录制。 - ddp
音频和视频之间存在延迟。 - Amit Thaper
虽然不是最好的答案,但被接受了:在使用mediaCodec和API 18方面表现良好。但我需要在API 16上进行操作。正如我在之前的评论中所说,我从我的录音机中禁用了audioSource,减少了音频和视频之间的延迟,并通过ffmpeg进行了良好的合并。干杯,伙计们。 - ddp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接