[英]How to encode camera frames into mp4 on android
我从640x480的 Android相机中取出相机预览帧(对我来说足够了)并对它们进行一些修改。 但现在我需要将它们编码为新的MP4
文件(带音频)。
这有些可能吗? 我不能使用ffmpeg
因为它没有那么好的许可证,但是我发现了Stagefright
框架应该可以做到这一点。 但我没有找到任何官方文档或教程来做我需要做的事情。
有没有办法用这个框架来做呢? 我不需要代码,只要指出正确的方向,我会很高兴。
有一种情况可以实现所描述的用例。 考虑将Camera
输出馈送到OpenGL
库的情况,其中一些效果应用于需要记录的预览帧。
那么在这种情况下,您可以使用传统的MediaRecorder
和GrallocSource
而不是CameraSource
。 设置看起来像这样:
MediaRecorder
设置与GrallocSource
。 用于记录的输入表面由Camera
+ OpenGL
组合操作提供,其实现SurfaceTextureClient
。 在SurfaceMediaSource_test
模块中可以找到一个很好的例子。
如果你必须支持API 9及更高版本, stagefright是相当不错的。 但正如你所看到的,这个框架不是正式的。 您可以使用platform / frameworks / av中的示例代码,风险自负。
谷歌源包括CameraSource,它直接向编码器提供相机帧。 虽然这种方法可能更有效(像素根本不会复制到用户空间),但它不允许操作。 可以修改C ++源代码,但强烈建议您使用Java访问Camera,并将预览帧通过JNI传递给stagefrght(OpenMAX)编码器。 在某些设备上,这可能会强制您使用软件编码器。 您必须将视频帧转换为编码器的YUV平面格式。 有关优化的转换器,请参阅libyuv 。
如果您可以限制对API 16及更高版本的支持,则使用官方Java MediaCdec API会更安全。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.