如何在Android上将相机帧编码为mp4

时间:2014-05-03 22:17:30

标签: android camera capture frames stagefright

我在 640x480 (对我来说足够了)中从Android相机拍摄相机预览帧并对它们进行一些修改。但是现在我需要将它们编码为新的MP4文件(带音频)。

这有可能吗?由于版权不太好,我无法使用ffmpeg,但我发现Stagefright框架应该可以做到这一点。但我没有找到任何官方文档或教程来做我需要做的事情。

请问这个框架有办法吗?我不需要代码,只要指出正确的方向,我会很高兴。

2 个答案:

答案 0 :(得分:2)

有一种情况可以实现所描述的用例。考虑将Camera输出馈送到OpenGL库的情况,其中某些效果应用于需要记录的预览帧。

在这种情况下,您可以使用传统的MediaRecorderGrallocSource代替CameraSource。设置看起来像这样:

MediaRecorder设置为GrallocSource。用于记录的输入表面由实现Camera的{​​{1}} + OpenGL组合操作提供。可以在SurfaceMediaSource_test modules中找到一个很好的例子。

答案 1 :(得分:1)

如果您必须支持API 9及更高版本,

stagefright 非常好。但正如你所看到的,这个框架不是正式的。您可以自担风险使用platform/frameworks/av中的示例代码。

Google源码包含CameraSource,可直接向编码器提供相机帧。虽然这种方法可能更有效(像素根本不会复制到用户空间),但它不允许操作。可以修改C ​​++源代码,但强烈建议您使用Java访问Camera,并通过JNI将preview frames传递给stagefrght(OpenMAX)编码器。在某些设备上,这可能会强制您使用软件编码器。您必须将视频帧转换为编码器的YUV平面格式。有关优化的转换器,请参阅libyuv

如果您可以限制对API 16及更高版本的支持,则使用官方Java MediaCdec API会更安全。