Android MediaRecorder录制Surface(不是Camera)

时间:2012-12-04 22:52:19

标签: android video java-native-interface mediarecorder

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

我认为通过压倒大部分课程是可能的,但我非常喜欢一些想法...... 除此之外,我不确定在MediaRecorder中如何使用Camera类,以及我应该从Surface获取什么来替换它。

感谢您的关注!

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

5 个答案:

答案 0 :(得分:3)

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

一些示例代码可用here,包括一个Breakout游戏的补丁,用于在游戏过程中记录游戏。

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

遗憾的是,这在Java层是不可能的。 Camera和Media Recorder之间的所有通信都发生在本机代码层中,并且无法将非Camera数据注入该管道。

虽然Android 4.1添加了允许访问设备视频编码器的Media Codec APIs,但是没有简单易用的方法来获取生成的编码流并将其保存为标准视频文件。你可以找到一个库来做或者自己写一个。

答案 3 :(得分:1)

您可能希望从AOSP中的其他文件夹中追踪兔子洞 框架/ AV /媒体 只要熟悉NDK(C / C ++,JNI,...)和Android(权限,...)

非常深入,并且不确定你可以在非root用户设备上走多远。

答案 4 :(得分:0)

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

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

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