1

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

这怎么可能?由于许可证不太好,我无法使用ffmpeg,但我找到Stagefright了应该能够做到这一点的框架。但是我没有找到任何官方文档或教程来做我需要做的事情。

请问有没有办法用这个框架做到这一点?我不需要代码,我会很高兴为我指出正确的方向。

4

2 回答 2

2

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

那么在这种情况下,您可以使用传统MediaRecorder的 withGrallocSource而不是CameraSource. 设置如下所示:

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

于 2014-05-07T14:35:36.323 回答
1

如果您必须支持 API 9 及更高版本, stagefright非常好。但正如你所见,这个框架不是官方的。您可以使用platform/frameworks/av中的示例代码,风险自负。

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

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

于 2014-05-04T07:13:58.510 回答