Гибкая мобильная камера + родное расширение - PullRequest
2 голосов
/ 14 ноября 2011

Я уже задавал этот вопрос на предварительном форуме Adobe, но они хранят молчание, поэтому мне нужна ваша помощь!

Мне нужно создать приложение, которое должно включать / выключать фонарикAndroid-устройство во время прямой трансляции видео на сервер.

Итак, я сделал и расширение.Функция Java проста:

 try{ 
   if (isOn){
     camera = Camera.open();
       Parameters params = camera.getParameters();
       params.setFlashMode(Parameters.FLASH_MODE_TORCH);
       camera.setParameters(params);
     } else {
        camera.release();
     }     
     } catch( Exception e ){
 }

Я использовал HTC desire S с передней и задней камерой.Когда я выполняю потоковую передачу из эфирного приложения (используя as3 camera = Camera.getCamera ()) и пытаюсь использовать это расширение, оно вообще не отвечает

Так что я нашел обходной путь: во флэш-памяти я изменил кодto:

 camera = null;
 nativeExtension.turnFlashOn(true);
 camera = Camera.getCamera("1");

Этот код работает, только когда я использую заднюю камеру, но мне нужно передать аргумент "1", который на самом деле является фронтальной камерой, но в этом случае используется задняя камера.В любом случае - все работает нормально.

Но когда я пытался использовать это приложение на HTC только с задней камерой, я застрял ... Я не могу использовать Camera.getCamera ("1"), потому что у меня только "0"камера, которая является задней камерой.Поэтому, когда я использую этот код:

 camera = null;
 nativeExtension.turnFlashOn(true);
 camera = Camera.getCamera("0");

мое изображение зависает с обеих сторон (Android-приложение и с другой стороны), и оно становится нормальным, когда вспышка выключена

Ответы [ 2 ]

1 голос
/ 09 декабря 2011

Я думаю, это потому, что у вас все еще есть открытая камера в родном расширении. Вы отпускаете его только при запуске nativeExtension.turnFlashOn (false)

Ресурс камеры может удерживаться только одним процессом одновременно. Вот почему это замерзает. Я подозреваю, что если вы посмотрите системные журналы (logcat), то увидите ошибки типа «Невозможно подключиться к камере». Когда ваша вспышка выключена, вы запустили camera.release (), поэтому он не удерживается и AS может его получить. .

Я не уверен, что происходит в AS, где вы запрашиваете фронтальную камеру, но используете back. Вы не очень ясно. В любом случае, не делайте этого, потому что желаемый результат не может быть достигнут, потому что это потребует двух процессов, удерживающих ресурс камеры одновременно.

Почему вы не делаете потоковую передачу с вашего собственного расширения? Таким образом, вы можете использовать камеру и вспышку одновременно, и производительность может быть намного лучше, поскольку она работает изначально. Поддержка Flex для камеры и записи видео очень плохая. Я собирался использовать его и в конце концов решил переместить все процессы моей камеры в NE.

Надеюсь, это поможет

0 голосов
/ 25 февраля 2013

Если на вашем устройстве установлено 0, 1, 2 камеры, попробуйте эту логику

 camera = null;
 nativeExtension.turnFlashOn(true);
// get front camera
camera = Camera.getCamera("1");
// if no front cam try back
if (camera == null)
 camera = Camera.getCamera("0");
// if no cams try default cam
if (camera == null)
 camera = Camera.getCamera();
else {
  trace("Mobile device has no camera!");
}

Этот код работает на устройстве с нулями, 0 или 2 камерами

...