Android:如何在没有有效表面的情况下初始化MediaRecorder进行视频预览?

时间:2009-08-09 20:20:28

标签: android video-capture mediarecorder

我正在构建一个相机应用程序,其中视频被持续捕获并保存到SD卡。视频很短(几分钟),其长度由setMaxDuration()预设。

整个过程运行正常,而主要活动在前台。但是,当我转到另一个活动(例如设置)时,视频录制仅在后台工作,直到达到最大持续时间。文件已保存,但无法启动新序列 因为prepare()失败,显然是因为setPreviewDisplay()不喜欢没有适当的表面来附加。

我尝试使用虚拟Surface,虚拟SurfaceHolder,lockCanvas()以及其他各种技巧,但没有任何效果。有没有办法在没有有效表面的情况下初始化MediaRecorder?

5 个答案:

答案 0 :(得分:4)

不幸的是,您仍然需要预览到有效的表面才能录制视频(Android SDK 1.6至2.2)。已记录增强请求以删除此限制http://code.google.com/p/android/issues/detail?id=9570

答案 1 :(得分:2)

我使用了一项服务,并使用1px * 1px宽的表面。可在此处找到操作方法:  http://pickerwengs.blogspot.de/2011/05/android-background-video-recorder-on.html

答案 2 :(得分:0)

我认为IP Webcam应用可以做到这一点,但我不知道如何做。也许它仅适用于> = 2.3。我不确定我看到它在哪个版本上运行。我问了一个问题,找出它是如何工作的。

答案 3 :(得分:0)

您只需添加以下行即可使用MediaCodec创建一个曲面:

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

...

mMediaRecorder.prepare();

答案 4 :(得分:-1)

您是否正在实施Surface回调?

为什么需要在没有有效表面的情况下初始化MediaRecorder?

即使您离开主要活动,您是否应该录音?还是在产生其他活动之前停止录制?