【问题标题】:Access both back and front cameras simultaneously同时访问后置和前置摄像头
【发布时间】:2015-05-21 14:43:42
【问题描述】:

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

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

到目前为止,我已经完成了:一次访问一个摄像头以提供画中画的实现。

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

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

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

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

谁能帮助我,至少提供一些建议?

谢谢 !

【问题讨论】:

    标签: android camera


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,我不知道。我猜新的三星设备每个相机都有一个图像处理器。我将尝试像这样实现它并在多个设备上进行测试。
    • 三星 S4、S5 和 S6 支持双摄像头模式,但他们为此选择使用专有 API;它甚至没有与三星相机 SDK 一起发布。同样适用于 LG 擎天柱 G Pro。 我相信可以对这个 API 进行逆向工程,但还没有看到这种情况发生。可能是没有足够的激励。
    • 在 Pixel XL 上使用最新的 Android 7.1 进行了尝试。即使它的硬件有一个能够处理多个相机的图像处理器,我在尝试使用 Camera2 API 打开两个相机时仍然遇到了 ERROR_MAX_CAMERAS_IN_USE。不幸的是。
    【解决方案2】:

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

    【讨论】:

    • 如果这可以开源就太好了,我想改进它
    • 能否把代码分享给git,对我们这样的初学者有帮助
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

      因此,最准确的方法是启动两个摄像头并从每个摄像头等待帧,并检查是否没有捕获失败错误。

      【讨论】:

        猜你喜欢
        • 2014-09-28
        • 2012-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-10
        • 1970-01-01
        相关资源
        最近更新 更多