Определить, захватывает ли камера во Flash - PullRequest
1 голос
/ 15 июня 2010

У меня проблемы с Camera.getCamera () во Flash AS3. Если есть несколько драйверов камеры, он не обязательно выбирает правильный. Если по умолчанию правильно, программа работает нормально; однако, если в качестве драйвера по умолчанию выбран другой драйвер, светодиод на веб-камере не загорается и видео не захватывается. Я могу перебрать доступные камеры и выбрать произвольный. Однако я не знаю, как определить, правильно ли выбрана камера. Это не возвращает ноль. Я рассмотрел использование camera.currentFPS, но не ясно, когда это будет обновлено. Я действительно изо всех сил пытаюсь определить динамически, какая камера сделает трюк!

Ответы [ 3 ]

7 голосов
/ 12 октября 2012

Я понимаю, что это старый вопрос, на который уже дан ответ, но, учитывая, что эта ссылка является самым сильным источником ссылок на мое сообщение, я счел необходимым сделать более информированный ответ, а также объяснить новые обновления CameraDetectionбиблиотека.

причины:

есть несколько хорошо известных причин, которые могут заставить Camera.getCamera () вернуть действительный объект Camera, но камера фактически не будет работать.

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

  2. Ноутбуки Mac использовалисьиметь несколько камер в списке, даже если они не были подключены.это часто показывалось как камера DVI и что-то еще (извините за плохую память).Если по какой-либо причине одна из этих «отключенных» камер была выбрана по умолчанию, то у вас возникнут проблемы.

  3. Адаптер Google Chat / Video в прошлом вызывал проблемы.просто его установка на некоторое время вызвала у людей много проблем (возможно, это началось в 2011 году?), поскольку вы никогда не знаете, какую версию ОС или плеера вы получите, но это все еще может быть проблемой.

почему эта проблема отстой:

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

что вы должны ожидать

, чтобы определить поведение работающей камеры, я использую таймер для проверки fps и уровней активности камеры.это общий результат: (этот таймер установлен на 100 мс)

fps:0   activity:-1
 ...  x20  ...
fps:0   activity:100
fps:0   activity:100
fps:8.1 activity:5
fps:8.5 activity:46
fps:8.2 activity:3
fps:8.4 activity:3

, поэтому камера не отвечает на 2,1 целых секунд !!!какие!?!?!?Я знаю.но затем он, наконец, начинает действовать. Это обычное поведение, хотя я тестирую его на 6-ядерном 3,3-ГГц компьютере с небольшой нагрузкой.моя библиотека продолжает проверять камеру, ожидая изменения этих уровней активности и fps.

что вы получаете, когда оно не работает

можете ли вы догадаться, что происходит, когда камера не работает?вы догадались!

вы получаете это безостановочно, навсегда

fps:0 activity:-1
fps:0 activity:-1
fps:0 activity:-1

, поэтому мой код будет проверять камеру по умолчанию в течение 3 полных секунд, ожидая некоторой активности, а затем выйдет.это плохая часть, может быть, все оборудование отстой, а процессор уже перегружен, и для получения ответа требуется больше 3 секунд?горе нам, ActionScript, ребята.

CameraDetection

моя библиотека делает все это и даже больше!он даже обрабатывает получение разрешения от пользователя на использование мультимедийных устройств!

обновлено 2012.10.06 , теперь оно имеет:

  • MediaPermissions - класс, который обрабатывает худшую часть камер.он получит разрешение, сообщит вам, было ли это разрешено или отклонено, и даже скажет, если у пользователя установлен флажок «запомнено»
  • CameraChecker - абстракция для очистки библиотеки.
  • CameraDetection - проще в использовании и сообщает вам еще больше!получать события, когда диалоговое окно разрешений открывается и закрывается, когда пользователь дает разрешение, и когда камера найдена, камеры не используются, и даже когда есть камеры, но ни одна из них не работает
  • регистрация! - почти готово, я буду поддерживать ведение журнала всех данных, которые использует CameraDetection, поэтому, возможно, мы сможем получить достаточно данных, чтобы подтолкнуть Adobe к исправлению чего-либо ...

пожалуйста, посетите Домашняя страница CameraDetection и не забудьте просмотреть другие посты об этом!

, чтобы получить код, который вы можете перейти непосредственно на github

1 голос
/ 15 июня 2010

Прочтите это сообщение в блоге , оно может быть полезно для того, что вы пытаетесь сделать.

Я помню, я использовал этот класс некоторое время назад, потому что были проблемы с обнаружениемправильная веб-камера в Macs в приложении, над которым я работал.Тем не менее, никогда не сталкивался с этой проблемой для Windows или Linux.

Тогда у меня был довольно сжатый срок, поэтому я не особо разбирался в предмете.Я помню, у этого кода были некоторые проблемы с некоторыми встроенными камерами в ноутбуках под управлением Windows.В итоге я просто проверил flash.system.Capabilities.os, чтобы определить, был ли клиент Mac или нет.Для Mac я использовал код в этом классе, как есть.Для всего остального я просто обнаружил камеру «обычным способом» (то есть, получив камеру по умолчанию).Он хорошо работал во всех наших тестах, и так как времени было мало, это решило проблему.

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

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

0 голосов
/ 15 июня 2010

То, что вы хотите, вероятно, уровень активности http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/media/Camera.html#activityLevel Но если у вас просто возникают проблемы с выбором «правильной» камеры в OSX, я предлагаю вам использовать выпадающий список и позволить пользователю выбрать. Используйте Camera.names, чтобы заполнить раскрывающийся список выбора, и используйте выбранный индекс, чтобы сделать фактический выбор. Одна из основных проблем заключается в том, чтобы убедиться, что вы используете строку для выбора камеры, она противоположна выбору микрофона, где используется число.

//camera uses string
var camera:Camera = Camera.getCamera("0");

//microphone uses number
var mic:Microphone = Microphone.getMicrophone(0);

//method to handle the selection of a new camera
private function changeCamera(evt:ListEvent):void {
    camera = Camera.getCamera(evt.currentTarget.selectedIndex.toString());
}

Я сам видел различия с Windows и OSX, но не помню точную проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...