我在 640x480 (对我来说足够了)中从Android相机拍摄相机预览帧并对它们进行一些修改。但是现在我需要将它们编码为新的MP4
文件(带音频)。
这有可能吗?由于版权不太好,我无法使用ffmpeg
,但我发现Stagefright
框架应该可以做到这一点。但我没有找到任何官方文档或教程来做我需要做的事情。
请问这个框架有办法吗?我不需要代码,只要指出正确的方向,我会很高兴。
答案 0 :(得分:2)
有一种情况可以实现所描述的用例。考虑将Camera
输出馈送到OpenGL
库的情况,其中某些效果应用于需要记录的预览帧。
在这种情况下,您可以使用传统的MediaRecorder
与GrallocSource
代替CameraSource
。设置看起来像这样:
MediaRecorder
设置为GrallocSource
。用于记录的输入表面由实现Camera
的{{1}} + OpenGL
组合操作提供。可以在SurfaceMediaSource_test
modules中找到一个很好的例子。
答案 1 :(得分:1)
stagefright 非常好。但正如你所看到的,这个框架不是正式的。您可以自担风险使用platform/frameworks/av中的示例代码。
Google源码包含CameraSource,可直接向编码器提供相机帧。虽然这种方法可能更有效(像素根本不会复制到用户空间),但它不允许操作。可以修改C ++源代码,但强烈建议您使用Java访问Camera,并通过JNI将preview frames传递给stagefrght(OpenMAX)编码器。在某些设备上,这可能会强制您使用软件编码器。您必须将视频帧转换为编码器的YUV平面格式。有关优化的转换器,请参阅libyuv。
如果您可以限制对API 16及更高版本的支持,则使用官方Java MediaCdec API会更安全。