Подтвердить что ты не робот

Использование обеих камер на Android: "Не удалось подключиться к службе камеры"

У меня возникают проблемы с доступом к обеим (передним и задним камерам одновременно). Когда включается одна камера, она работает. Когда я выключаю сначала и включаю второй, он работает. Это дает следующее исключение, когда я пытаюсь включить вторую камеру, в то время как первая все еще показывает изображение.

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 Создает новый объект камеры для доступа к конкретной аппаратной камере. Вы должны вызвать release(), когда вы закончите с помощью камеры, иначе он останется заблокированы и недоступны для других приложений. В вашем приложении должен быть включен только один объект камеры за определенный период времени для определенного аппаратная камера.

.. но у меня есть только один объект Camera для одной аппаратной камеры, и я хотел создать второй объект для второго устройства.

  • Кто-нибудь знает, возможно ли это (я использую Android 2.3.3)?
  • Место: android.hardware.Camera.native_setup (Native Method) может предположить, что, вероятно, это ограничение аппаратных/драйверов - я использую HTC Sensation.
4b9b3361

Ответ 1

Этот вопрос в основном говорит, что это невозможно сделать, но может быть какой-то взлом. Этот отсутствие ответа от групп google говорит мне, скорее всего, не так. Здесь - еще одно сообщение без ответа в группах google. Здесь есть еще одно сообщение, в котором обсуждается использование двух камер одновременно.

Итак, мой первоначальный ответ - нет, это невозможно. НО может быть какое-то обходное решение, вам просто нужно найти его самостоятельно, потому что он еще не обнаружен:).

EDIT 11/21/11: К сожалению, я нашел еще одно доказательство того, что это невозможно сделать, официальный представитель Sprint/HTC здесь. Я понимаю, что вы используете Sensation, и это EVO 4g, но я уверен, что он по-прежнему применяется.

Ответ 2

Обе камеры могут запускаться вместе, пока аппаратное обеспечение поддерживает ее. Сначала вам нужно найти конкретный SoC, используемый вашим телефоном. Вы можете найти это, используя команду

$ adb shell getprop

Чеч поле [ro.board.platform], для Nexus 6 он возвращает

[ro.board.platform]: [msm8084]

Теперь вам нужно будет проверить, имеет ли этот чипсет возможности двух ISP-устройств в аппаратном обеспечении. Для чипсетов Qualcomm Snapdragon вы можете найти здесь. Для Samsung Exynos вы можете найти здесь. Теперь, если ваше устройство поддерживает двойную камеру и в нем установлена ​​последняя ОС, вы можете использовать это приложение (ref), разработанное Jens, чтобы проверить, работает ли двойная камера. Вероятно, он работает, он работает на моем Nexus 6. Видео: http://youtu.be/lt8N1Lpa9Zw

Спасибо, Джай

Ответ 3

Я также хотел сделать то же самое, но не могу этого добиться, его ограничение на android os.

ВЫ ДОЛЖНЫ ОТКЛЮЧИТЬ подключенный объект камеры, к которому будет обращаться другой.

Такая же проблема возникает при доступе к классу AudioRecord, вы просто не можете создать объект, пока вы не отпустите первый.