我想要实现的目标:同时访问前置和后置摄像头。
我研究过的内容:我知道Android相机API不支持使用相机的多个实例,并且在使用另一个相机之前必须先释放相机。我已经阅读了几十个有关此问题的问题,我知道在某些设备上它是可能的(如三星S4或其他新设备)。 我还发现在某些设备上可以在Android KitKat中访问它们。 我也知道在api> = 21时,使用camera2 API,可以同时访问它们,因为它是线程安全的。
到目前为止我所做的是:实现一次访问摄像机以提供画中画。
我知道不可能在每台设备上实现双同时摄像头,我只是想让一些设备可以使用它。
如何测试设备是否能够访问它们?
我还搜索了一个可以允许我这样的图书馆,但我没有找到任何东西。有没有这样的图书馆?
我想为尽可能多的设备提供此功能,而对于其他设备,我将保留该功能的当前状态(逐个)。
任何人都可以帮助我,至少有一些建议吗?
由于 !
答案 0 :(得分:10)
Android相机API通常允许同时使用多个相机,但大多数设备没有足够的硬件资源来支持实际操作 - 例如,通常只有一个相机图像处理器共享两个相机。
如果您可以同时使用多台摄像机,那么Android API中包含的任何查询都不会提前告诉您。
唯一可以告诉您的方法是在打开第二台相机时尝试打开第二台相机。如果您可以打开第二台摄像机,那么您可以进行画中画等。如果您尝试打开第二台摄像机时遇到异常,那么该特定设备不支持打开两台摄像机。
答案 1 :(得分:1)
可以使用Android Camera2 API,但如上所述,大多数设备都没有硬件支持。如果您使用的是Nexus 5X,Nexus 6或Nexus 6P,则可以使用此BothCameras app进行测试。我使用硬件h264编码器实现了blitting以允许视频录制(除静态图片外)。
答案 2 :(得分:-1)
由于硬件限制,您无法访问所有Android手机中的两个摄像头。最好的替代方案是逐个使用相机。为此,您可以使用单个相机对象,并可以更改相机面以拍摄另一张照片。
我在我的一个申请中这样做了。 https://play.google.com/store/apps/details?id=com.ushaapps.bothie
答案 3 :(得分:-1)
我决定提一下,在某些情况下,仅使用 Camera2 API 打开两个摄像头并不足以了解支持。
有些设备在打开时不会抛出错误。第二个摄像头正确打开,但第一个将调用 onCaptureFailed 回调。
因此,最准确的方法是启动两个摄像头并等待每个摄像头的帧,然后检查是否存在捕获失败错误。