同时访问前后摄像头

12
我想实现的目标是:同时访问前置和后置摄像头。
我的调研结果是:我知道android相机API不支持使用多个摄像头实例,您必须在使用另一个摄像头之前释放正在使用的摄像头。我已经读了很多相关问题,我知道在某些设备上可以做到这一点(例如三星S4或其他新设备)。我还发现,在某些设备上,Android KitKat可以同时访问两个摄像头。我也知道,在api >= 21的情况下,使用camera2 API,因为它是线程安全的,可以同时访问两个摄像头。
目前为止,我已经实现了访问一个摄像头以提供画中画功能。
我知道并不是每个设备都支持同时使用两个摄像头,我只是想找到一种方法使其可用于某些设备。
如何测试设备是否能够同时访问两个摄像头?
我还搜索了可以允许我实现此功能的库,但是我没有找到任何东西。有这样的库吗?
我希望尽可能多地使这个功能可用于设备,并且对于另一些设备,我将保留当前状态(一个接一个)的功能。
请问有人可以帮助我,至少给我一些建议吗?
谢谢!
4个回答

13

Android相机API通常允许同时使用多个摄像头,但大多数设备实际上没有足够的硬件资源来支持这一点 - 例如,通常只有一个摄像头图像处理器供两个摄像头共享。

在Android API中没有包含任何查询可以事先告诉您是否可以同时使用多个摄像头。

唯一的方法是尝试在已经打开一个摄像头的情况下打开第二个摄像头。如果您可以打开第二个摄像头,则可以进行画中画等操作。如果在尝试打开第二个摄像头时出现异常,则该特定设备不支持同时打开两个摄像头。


谢谢,我不知道这个。我猜新的三星设备每个相机都有一个图像处理器。我会尝试这样实现,并在多个设备上进行测试。 - DDsix
三星S4、S5和S6支持双摄像头模式,但他们选择使用专有API实现;甚至没有在三星相机SDK中发布。LG Optimus G Pro也是如此。我相信可以通过逆向工程来实现这个API,但我还没有看到这种情况发生。可能是因为没有足够的激励。 - Alex Cohn
尝试在Pixel XL上使用最新的Android 7.1进行测试。虽然它的硬件具有能够处理多个相机的图像处理器,但我仍然遇到了ERROR_MAX_CAMERAS_IN_USE错误,当我尝试使用Camera2 API打开两个相机时。不幸的是。 - Billy

1
使用Android Camera2 API是可能的,但正如上面所指出的,大多数设备都没有硬件支持。如果您有Nexus 5X、Nexus 6或Nexus 6P,则可以使用BothCameras应用程序进行测试。我已经实现了blitting,以允许使用硬件h264编码器录制视频(除了静态图片)。

如果这个可以开源,那就太好了,我想改进它。 - Mitro
你能分享一下git上的代码吗?也许对像我们这样的初学者会有所帮助。 - midhun p

-1
由于硬件限制,您无法访问所有安卓手机中的两个摄像头。最好的替代方案是逐个使用两个摄像头。为此,您可以使用单个摄像头对象,并更改摄像头面来拍摄另一张照片。
我在我的一个应用程序中做到了这一点。 https://play.google.com/store/apps/details?id=com.ushaapps.bothie

-1

我决定提到,在某些情况下,仅使用Camera2 API打开两个相机是不足以了解其支持情况的。

有些设备在打开时不会抛出错误。第二个相机可以正确打开,但第一个相机将调用onCaptureFailed回调函数。

因此,最准确的方法是启动两个相机并等待从它们中的每一个获取帧,并检查是否存在捕获失败错误。


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