USB 10 USB камера не работает из кода, но работает из других программ - PullRequest
0 голосов
/ 24 мая 2019

Я не могу создать приложение на каком-либо языке программирования, которое будет воспроизводить видео с веб-камеры USB.

Я хочу отобразить видео с веб-камеры, а затем сделать снимок кадра при нажатии кнопки.

Существующая программа использует avicap32.dll и отлично работает на старых версиях Windows, но не работает на Windows 10.

В Windows 10 я проверил, что VLC может воспроизводить веб-камеру из dshow, и это тоже возможно. Затем я создал приложение на c #, которое использовало оболочку libvlc для воспроизведения веб-камеры, и видео никогда не загружалось. Однако свет на моей веб-камере загорается во время работы приложения. Если я возьму приложение и переместу веб-камеру на компьютер с Windows 7, видео воспроизводится в моем приложении c #.

Затем я попробовал ffmpeg, запуск ffplay из командной строки без проблем воспроизводит видео с веб-камеры. Я создал приложение на c #, которое создаст новый процесс и запустит ffplay exe с аргументами. Я получаю сообщение об ошибке в выводе ffplay о том, что не удалось найти формат видео.

Затем я попытался запустить ffplay из подпроцесса в python, по сути, точно так же, как приложение c # выше. На этот раз воспроизведение видео прошло успешно.

Я подумал, что это как-то связано с c #. Поэтому я сделал быстрое приложение на c ++, которое использует lib vlc для воспроизведения dshow: //. У меня не воспроизводится видео, но включается свет на веб-камере. Если я перенесу это приложение c ++ на компьютер с Windows 7, приложение будет работать и отображать видео с камеры. (это было сделано с использованием Mingw, а не Visual C ++)

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

Странно то, что я смог использовать примеры c # приложения Universal от Microsoft, и он может использовать веб-камеру. Я должен дать примеру приложения разрешение на использование веб-камеры в первую очередь.

Кроме того, я знаю, что веб-камера работает нормально на компьютере с Windows 10, потому что приложение Камера в Windows 10 работает нормально, vlc работает нормально, а ffplay работает отлично.

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

Обновление: Мне все еще не повезло получить приложение winforms для отображения изображения с веб-камеры, однако я решил использовать Process для запуска скрипта на python, который запускает ffplay, и, к удивлению, я получил то же сообщение об ошибке, которое получал, когда просто запускал ffplay из C #, используя процесс. Ошибка, которую я получаю, "Не удалось найти параметры кодека для потока 0 (видео: mjpeg (MJPG / 0x47504A4D), нет (bt470bg / неизвестно / неизвестно), 640x480): неизвестный формат пикселей Подумайте об увеличении значения параметров «анализируемость» и «проверка» Вход № 0, dshow, из 'video = Logitech HD Webcam C615': Продолжительность: N / A, битрейт: N / A Поток № 0: 0: видео: mjpeg (MJPG / 0x47504A4D), нет (bt470bg / неизвестно / неизвестно), 640x480, 30 кадров в секунду, 30 тбр, 10000 кбит / с, 10000 кбит / с "

ОБНОВЛЕНИЕ 2:

Я удивлен тем, как мало информации в Интернете доступно по этой теме. Однако для тех из вас, кто столкнется с этой проблемой в будущем. Я нашел статью на веб-сайте Microsoft, в которой говорится, что новый механизм безопасности приложений в Windows 10 версии 1809 запрещает доступ любого приложения к камере и микрофонам, если они не имеют UWP и не имеют разрешений. Однако, если приложение знает, как напрямую обмениваться данными с устройством, минуя библиотеки Windows, оно может по-прежнему использовать камеру. https://support.microsoft.com/en-us/help/4468234 На этом я и закончил. Я собираюсь создать приложение UWP с сервером сокетов tcp для передачи изображений с веб-камеры на мое старое программное обеспечение.

...