Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android: How to initialize MediaRecorder without a valid surface for video preview?

I am building a camera app, where videos are continuously being captured and saved to the SD card. The videos are short (few minutes), and their length are preset with setMaxDuration().

The whole process works fine, while the main activity is in the foreground. But, when I go to another activity (e.g. settings), the video recording works in the background only until max duration is reached. The file is saved, but a new sequence can not be started because prepare() fails, apparently because setPreviewDisplay() doesn't like not having a proper surface to attach to.

I tried to use a dummy Surface, a dummy SurfaceHolder, lockCanvas(), and various other tricks, but nothing works. Is there a way to initialize MediaRecorder without a valid surface?

like image 224
Robert Avatar asked Aug 09 '09 20:08

Robert


2 Answers

Unfortunately it is still a requirement for you to preview onto a valid surface in order to record video (Android SDK 1.6 thru 2.2). There is an enhancement request logged to remove this restriction http://code.google.com/p/android/issues/detail?id=9570

like image 108
tardate Avatar answered Oct 17 '22 02:10

tardate


You just have to create a surface with MediaCodec by adding the following line:

Surface  mySurface = MediaCodec.createPersistentInputSurface();
mMediaRecorder.setPreviewDisplay(mySurface);

...

mMediaRecorder.prepare();
like image 33
Frederic HUGUENIN Avatar answered Oct 17 '22 04:10

Frederic HUGUENIN