采集视频(CameraAPI)和MediaCodec的简单使用
Capture video (Camera API) and simple use of MediaCodec
最近我在使用 MediaRecorder 捕获视频并在输出中处理它们。然而,事实证明,存在安全限制,这不允许我从 MediaRecorder 捕获输出流(问题出现在下面的 link 中):
"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 方法.. 最精彩的部分是在他开始渲染视频时开始的。
Bigflakes MediaCodec page contains mostly tests for MediaCodec
, if you still insist on using that as a reference then start from encodeCameraToMpeg()
in CameraToMpegTest, also take a look at EncodeAndMux 了解如何设置 MediaCodec encoder
。
有关工作视频捕获示例,请查看 Google 示例存储库中提供的 taehwandev's MediaCodecExample. For an example on how to decode your recorded video, take a look at the BasicMediaDecode。
将 MediaCodec 与 Camera1
API 一起使用的优势在于您将能够支持 API 级别 18 及更高级别的设备。如果您只针对 API 级别 21 及以上,那么 Camera2
应该可以,这里有一个 Android Camera2Video Sample 供您在需要时参考。
最后,看看新的 CameraX
API 可能也是值得的,虽然它不应该用于生产,但这是 android 的方向相机 API 正朝着。因此,可能值得一看 official documentation and going through a guide or two (eg: Exploring CameraX) 以提前了解基本概念。
注意 - 不要在生产代码中使用 CameraX API,因为
CameraX 库处于 alpha 阶段,其 API 表面尚未最终确定。我只是将它作为一个选项提供,供您密切关注以供将来参考。
最近我在使用 MediaRecorder 捕获视频并在输出中处理它们。然而,事实证明,存在安全限制,这不允许我从 MediaRecorder 捕获输出流(问题出现在下面的 link 中):
"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 方法.. 最精彩的部分是在他开始渲染视频时开始的。
Bigflakes MediaCodec page contains mostly tests for MediaCodec
, if you still insist on using that as a reference then start from encodeCameraToMpeg()
in CameraToMpegTest, also take a look at EncodeAndMux 了解如何设置 MediaCodec encoder
。
有关工作视频捕获示例,请查看 Google 示例存储库中提供的 taehwandev's MediaCodecExample. For an example on how to decode your recorded video, take a look at the BasicMediaDecode。
将 MediaCodec 与 Camera1
API 一起使用的优势在于您将能够支持 API 级别 18 及更高级别的设备。如果您只针对 API 级别 21 及以上,那么 Camera2
应该可以,这里有一个 Android Camera2Video Sample 供您在需要时参考。
最后,看看新的 CameraX
API 可能也是值得的,虽然它不应该用于生产,但这是 android 的方向相机 API 正朝着。因此,可能值得一看 official documentation and going through a guide or two (eg: Exploring CameraX) 以提前了解基本概念。
注意 - 不要在生产代码中使用 CameraX API,因为 CameraX 库处于 alpha 阶段,其 API 表面尚未最终确定。我只是将它作为一个选项提供,供您密切关注以供将来参考。