模拟 Android 相机

Posted

技术标签:

【中文标题】模拟 Android 相机【英文标题】:Simulating an Android Camera 【发布时间】:2013-01-06 06:20:48 【问题描述】:

我正在使用 android 手机的摄像头作为输入来测试成像算法,并且需要一种方法来始终如一地测试这些算法。理想情况下,我想拍摄一个预先录制的视频源,并让手机“假装”该视频源是来自相机的实时视频。

我的理想解决方案是运行算法的应用不知道视频是预先录制的。我不想将视频文件直接加载到应用程序中,而是尽可能将其作为传感器数据读取。

这种方法可行吗?如果是这样,任何指向正确方向的指针都会非常有帮助,因为到目前为止谷歌搜索都让我失败了

谢谢!

编辑:澄清一下,我的理解是相机类使用相机服务从硬件读取视频。我不想在应用程序端做一些事情,而是想创建一个从视频文件而不是硬件读取的自定义摄像头服务。这可行吗?

【问题讨论】:

【参考方案1】:

当您对实时 Android 视频源进行处理时,您需要构建自己的 custom camera 应用程序,该应用程序通过 Android 提供的 PreviewCallback interface 为您提供各个帧。

现在,模拟这种情况会有点棘手,因为预览帧的格式通常是 NV21 格式。如果您使用的是预先录制的视频,我认为没有任何清晰的方法可以逐帧读取,除非您尝试getFrameAtTime 方法,该方法将为您提供完全不同格式的位图。

这使我建议您可以通过getFrameAtTime 方法使用这些位图进行测试(尽管我真的不确定您要在这里做什么)。为了使此代码能够在实时相机预览上工作,您需要将来自PreviewCallback 接口的 NV21 帧转换为与来自getFrameAtTime 的位图相同的格式,或者您可以调整您的算法以处理 NV21 格式帧。 NV21 是一种非常简洁的格式,分别显示颜色和亮度数据,但使用起来可能很棘手。

【讨论】:

感谢您的快速回复。这是一个很好的解决方案,但这并不是我想要的。我的理解是,Camera 类依赖于与硬件通信的摄像头服务。我不想编辑相机类,而是想创建一个从视频文件而不是硬件读取的自定义相机服务。为了清楚起见,我将在上面进行编辑。谢谢! 按照我的建议创建自定义相机类并不需要编辑相机类——它只是意味着您可以自己处理相机并获取预览信息,另一种方法是创建一个简单的意图来获取从设备的本机相机应用程序捕获的图像或视频。你是说你不想从实时预览中工作吗?您是否正在寻找一种使用传统相机但提供视频作为输入而不是硬件的方法?如果是这样,这是不可能的......你为什么要使用相机呢?

以上是关于模拟 Android 相机的主要内容,如果未能解决你的问题,请参考以下文章

Cordova 相机插件适用于模拟器,而不适用于 Android 设备

如何修复 Android 模拟器中的“无法连接到相机服务”异常

在flutter中从image_picker包中打开相机会导致真实设备上的应用程序崩溃,但在模拟器(android)中运行良好

不幸的是,相机已停止错误 android 6.0.0

Android“权限拒绝:无法使用相机”

用于相机预览的Android单元测试?