捕获视频(相机API)并轻松使用MediaCodec

时间:2019-05-24 13:49:38

标签: java android camera mediacodec

最近,我与MediaRecorder一起捕获视频并在输出中处理它们。但是事实证明,存在安全限制,这使我无法捕获MediaRecorder的输出流(以下链接中出现的问题):

"Seekable" file descriptor to use with MediaRecorder Android 6.0 (API 23)

因此,我不得不详细说明另一种解决方案,并决定使用Camer API,并在那里获得成功。因此,第一种方法是使用onPreviewFrame,捕获文件中的帧并转换颜色和格式(MediaCodec)。幸运的是,可以通过从例如SuraceTexture中获取视频来避免颜色转换问题,例如,在bigflakes项目中:

https://bigflake.com/mediacodec/CameraToMpegTest.java.txt

我不是Android Java的新手,但这确实让我不知所措。我不希望有现成的收据,我可以整整一个星期坐下来工作并破解该代码,但我首先要问的是:你们如何理解MediaCodec的视频,例如SurfaceTexture,然后将其放在MediaMuxer中,其次,您可以推荐一些教程,从该主题的最简单项目开始,然后逐步扩展代码吗?

我真的尝试处理bigflakes项目,但是我什至无奈,因为缺少onCreate方法。而最好的部分是当他开始渲染视频时开始的。

2 个答案:

答案 0 :(得分:0)

Bigflakes MediaCodec page主要包含针对MediaCodec的测试,如果您仍然坚持将其用作参考,那么请从CameraToMpegTest中的encodeCameraToMpeg()开始,也请看一下{ {3}},以了解如何设置MediaCodec encoder

有关有效的视频捕获示例,请查看EncodeAndMux。有关如何解码录制的视频的示例,请查看Google样本存储库中提供的taehwandev's MediaCodecExample

Camera1 API一起使用MediaCodec的优点是,您将能够支持API级别为18或更高的设备。如果您仅将API级别定位为21和更高级别,则Camera2应该有效,如果需要,这里有一个BasicMediaDecode供您参考。

最后,看一下新的CameraX API也可能是值得的,尽管它不应该在生产中使用,这就是android的相机API的发展方向。因此,值得一看Android Camera2Video Sample并仔细阅读一两个指南(例如:official documentation),以提前掌握基本概念。

注意-尚未在生产代码中使用CameraX API ,因为 CameraX库处于alpha阶段,其API界面尚未完成。我只是提供了此选项,供您随时参考。

答案 1 :(得分:0)

所以已经差不多一个星期了,我听了克里斯的建议,先后与taehwandev's MediaCodecExampleBasicMediaDecode一起工作,并且理解了这些代码,尽管后者变得更加复杂。但是,我认为这对理解Bigflakes CameraToMpegTest没有多大帮助。我不得不抱怨,因为我被深深地淹没了,除了自我演绎,似乎没有太多帮助。你们如何了解Android中的渲染,在哪里学习了如何将Mediacodec与CamerAPI一起使用。是否有任何教程,书籍和学习材料来解决最常见的问题? 该评论应采用答案的形式:因此,我建议与Grafikas show + capture合作,因为这至少是在应用程序环境中实现的。