繁体   English   中英

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

[英]How to encode camera frames into mp4 on android

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

这有些可能吗? 我不能使用ffmpeg因为它没有那么好的许可证,但是我发现了Stagefright框架应该可以做到这一点。 但我没有找到任何官方文档或教程来做我需要做的事情。

有没有办法用这个框架来做呢? 我不需要代码,只要指出正确的方向,我会很高兴。

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

那么在这种情况下,您可以使用传统的MediaRecorderGrallocSource而不是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM