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

10
我正在开发一个相机应用程序,视频会不断地被拍摄并保存到SD卡中。这些视频很短(几分钟),并且它们的长度是通过setMaxDuration()预设的。
当主活动在前台时,整个过程都很顺利。但是,当我进入另一个活动(例如设置)时,录制视频仅在后台工作,直到达到最大持续时间为止。文件已保存,但由于prepare()失败,显然是因为setPreviewDisplay()没有正确的表面可附加而无法启动新的序列。
我尝试使用虚拟表面、虚拟SurfaceHolder、lockCanvas()和其他各种技巧,但都没有成功。是否有一种方法可以在没有有效表面的情况下初始化MediaRecorder?
4个回答

4

1

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

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

...

mMediaRecorder.prepare();

0

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


-1
你正在实现Surface回调吗?
为什么需要在没有有效表面的情况下初始化MediaRecorder?
当您离开主活动时,是否应该继续录制?还是在生成其他活动之前停止录制?

是的,我已经实现了Surface回调。当存在有效的预览表面时,一切都运行良好。但是,我想在离开主活动时进行记录。无论预览表面是否可见,应用程序都应该能够开始录制视频。但是,我尝试的所有方法都表明在Android上尚不可能做到这一点。有人可以证明我错了吗? - Robert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接