在Android上使用两个摄像头:“无法连接到摄像头服务”

时间:2011-08-27 14:46:12

标签: android video camera

我在同时访问这两个(前后摄像头)时遇到了麻烦。 当打开一个摄像头时,它可以工作。 当我先关闭然后再打开它时,它会起作用。 当我试图打开第二台摄像机而第一台摄像机仍在显示图像时,它会出现以下异常。

E/AndroidRuntime(32325): FATAL EXCEPTION: main
E/AndroidRuntime(32325): java.lang.RuntimeException: Fail to connect to camera service
E/AndroidRuntime(32325):    at android.hardware.Camera.native_setup(Native Method)
E/AndroidRuntime(32325):    at android.hardware.Camera.<init>(Camera.java:265)
E/AndroidRuntime(32325):    at android.hardware.Camera.open(Camera.java:226)
E/AndroidRuntime(32325):    at com.example.videostreamer.MainActivity$CameraHandler.start(MainActivity.java:116)
E/AndroidRuntime(32325):    at com.example.videostreamer.MainActivity$2.onClick(MainActivity.java:74)
E/AndroidRuntime(32325):    at android.view.View.performClick(View.java:2532)
E/AndroidRuntime(32325):    at android.widget.CompoundButton.performClick(CompoundButton.java:99)

在文件中我发现了一个短语:

  

public static Camera open(int cameraId)

     

自:API等级9   创建一个新的Camera对象以访问特定的硬件摄像头。   使用完相机后必须调用release(),否则它将保留   已锁定且无法用于其他应用程序。   您的应用程序一次只能激活一个Camera对象   硬件相机。

..但我只有一个摄像头对象用于一个硬件摄像头,我想为第二个设备创建第二个对象。

  1. 有人知道这是否可行(我使用的是Android 2.3.3)?
  2. 这个地方:android.hardware.Camera.native_setup(Native Method)可以暗示它可能是硬件/驱动程序限制 - 我正在使用HTC Sensation。

3 个答案:

答案 0 :(得分:14)

This问题基本上说它无法完成,但可能存在一些黑客攻击。 This谷歌小组缺乏回应告诉我很可能不会。 Here是Google群组中的另一篇无回复帖子。 Here是另一篇讨论同时使用两台摄像机的帖子。

所以我最初的答案是否定的,这是不可能的。但是可能有一些解决方法,你可能必须自己找到它,因为它还没有被发现:)。

编辑11/21/11:遗憾的是,我发现Sprint / HTC here官方进一步证明无法做到这一点。我意识到你正在使用Sensation,这是一款EVO 4g,但我确信它仍然适用。

答案 1 :(得分:2)

只要硬件支持,两台摄像机都可以一起启动。首先,您需要找到手机使用的特定SoC。您可以使用命令

找到它
$ adb shell getprop

Chech the field [ro.board.platform],对于Nexus 6,它返回

[ro.board.platform]: [msm8084]

现在您需要检查此芯片组是否具有硬件双ISP功能。对于Qualcomm snapdragon芯片组,您可以找到它here。对于三星Exynos,您可以找到它here。现在,如果您的设备支持双摄像头并且其中安装了最新的操作系统,那么您可以使用(ref)开发的此应用程序Jens来验证双摄像头是否正常工作。它应该可以工作,它确实适用于我的Nexus 6。 视频:http://youtu.be/lt8N1Lpa9Zw

谢谢,Jai

答案 2 :(得分:0)

我也想做同样的事,但无法实现它,它的android os限制。

您必须释放连接的相机对象才能被其他人访问。

访问AudioRecord类时遇到同样的问题,在释放第一个类之前,你无法创建它的对象。