Android MediaRecorder to record a Surface (not Camera)

Gyome picture Gyome · Dec 4, 2012 · Viewed 9.7k times · Source

I'm looking at the class MediaRecorder of the Android SDK, and I was wondering if it can be used to record a video made from a Surface. Example: I want to record what I display on my surface (a video game?) into a file. As I said in the title: I'm not looking to record anything from the camera.

I think it is possible by overriding most of the class, but I'd very much like some ideas... Beside, I'm not sure how the Camera class is used in MediaRecorder, and what I should get from my Surface to replace it.

Thank you for your interest!

PS: I'm looking at the native code used my MediaRecorder to have some clue, maybe it will inspire someone else: http://www.netmite.com/android/mydroid/frameworks/base/media/jni/

Answer

fadden picture fadden · Jul 25, 2013

Android 4.3 (API 18) adds some new features that do exactly what you want. Specifically, the ability to provide data to MediaCodec from a Surface, and the ability to store the encoded video as a .mp4 file (through MediaMuxer).

Some sample code is available here, including a patch for a Breakout game that records the game as you play it.