8

我正在查看 Android SDK 的MediaRecorder类,我想知道它是否可用于录制由 Surface 制作的视频。示例:我想将我在表面(视频游戏?)上显示的内容记录到文件中。正如我在标题中所说:我不想从相机中记录任何东西。

我认为通过覆盖大部分课程是可能的,但我非常喜欢一些想法......此外,我不确定 Camera 类在 MediaRecorder 中的使用方式,以及我应该从 Surface 中得到什么来替换它。

感谢您的关注!

PS:我正在查看使用我的 MediaRecorder 的本机代码有一些线索,也许它会启发其他人: http: //www.netmite.com/android/mydroid/frameworks/base/media/jni/

4

5 回答 5

5

Android Lollipop 中添加了从 Surface 录制的功能。这是文档:

http://developer.android.com/about/versions/android-5.0.html#ScreenCapture

于 2014-11-06T20:20:57.870 回答
4

Android 4.3 (API 18) 添加了一些新功能,可以完全满足您的需求。具体来说,从 Surface 提供数据MediaCodec的能力,以及将编码视频存储为 .mp4 文件的能力(通过MediaMuxer)。

此处提供了一些示例代码,包括用于在您玩游戏时记录游戏的 Breakout 游戏补丁。

于 2013-07-24T23:26:47.397 回答
1

不幸的是,这在 Java 层是不可能的。相机和媒体记录器之间的所有通信都发生在本机代码层中,无法将非相机数据注入该管道。

虽然 Android 4.1 添加了允许访问设备的视频编码器的媒体编解码器 API,但没有易于使用的方法来获取生成的编码流并将其保存为标准视频文件。您必须找到一个库来执行此操作或自己编写一个。

于 2012-12-05T04:19:07.863 回答
1

只要熟悉 NDK(C/C++,JNI,...)和 Android(权限,...),您可能希望从 AOSP frameworks/av/media 中的不同文件夹跟踪兔子洞

走得很深,不确定在无根设备上可以走多远。

于 2013-01-02T20:43:09.173 回答
0

这是一篇关于如何在 EGLSurface 上绘图并使用 MediaCodec 生成视频的文章:

https://www.sisik.eu/blog/android/media/images-to-video

这使用 OpenGL ES,但您可以让 MediaCodec 提供一个表面,然后您可以从中获取画布以进行绘制。不需要 OpenGL ES。

于 2021-04-28T06:51:24.710 回答