同时访问后置和前置摄像头

Access both back and front cameras simultaneously

我要实现的目标:同时访问前后摄像头。

我研究过的内容:我知道 android 相机 API 不支持使用多个相机实例,您必须先释放一个相机才能使用另一个相机。我已经阅读了数十个关于此的问题,我知道在某些设备上这是可能的(例如三星 S4 或他们的其他新设备)。 我还发现可以在某些设备上的 Android KitKat 中访问它们。 我也知道在 api >= 21 上,使用 camera2 API,可以同时访问它们,因为它是线程安全的。

到目前为止我得到了什么:一次访问一个摄像头以提供画中画的实现。

我知道不可能在每台设备上同时实现双摄像头,我只是想要一种方法使其适用于某些设备。

我如何测试设备是否能够访问它们?

我也搜索了一个可以让我做这样的事情的图书馆,但我没有找到任何东西。有这样的图书馆吗?

我想让尽可能多的设备可以使用此功能,对于其他设备,我将保留该功能的当前状态(一个接一个)。

任何人都可以帮助我,至少提供一些建议吗?

谢谢 !

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

Android API 中没有查询可以预先告诉您是否可以同时使用多个摄像头。

唯一的判断方法是在已经打开一个摄像头的情况下尝试打开第二个摄像头。如果你可以打开第二个摄像头,那么你就可以做画中画等。如果你在尝试打开第二个摄像头时遇到异常,那么该特定设备不支持同时打开两个摄像头。

由于硬件限制,您无法访问所有 android 手机中的两个摄像头。最好的选择是一台一台地使用两个相机。为此,您可以使用单个相机对象并可以更改相机面以拍摄另一张照片。

我在我的一个应用程序中这样做过。 https://play.google.com/store/apps/details?id=com.ushaapps.bothie

可以使用 Android Camera2 API,但如上所述,大多数设备不支持硬件。如果您有 Nexus 5X、Nexus 6 或 Nexus 6P,它可以正常工作,您可以使用此 BothCameras app 进行测试。我已经实现了 blitting 以允许使用硬件 h264 编码器录制视频(除了静态图片)。

我决定提一下,在某些情况下,仅使用 Camera2 打开两个摄像头 API 不足以了解支持。

有些设备在打开时不会抛出错误。第二个摄像头正确打开,但第一个会调用 onCaptureFailed 回调。

所以最准确的方法是启动两个摄像头并等待它们中的每一个帧,并检查是否存在捕获失败错误。