@alebastr5

Как программно работать с USB веб-камерой в Linux использую C/С++?

Я хочу программно, не используя библиотеки вроде OpenCV подключиться к USB веб-камере и получить с нее видео/аудио/изображение. Как реализована работа с такими устройствами в Linux? Какие сущности (абстракции) используются для работы с такими устройствами? Насколько я понимаю должен быть какой-то протокол работы с USB, который в свою очередь должен обрабатываться кодеком аудио/видео. Или можно как-то напрямую работать с драйвером устройства? Подскажите куда посмотреть?
  • Вопрос задан
  • 400 просмотров
Пригласить эксперта
Ответы на вопрос 3
@Wexter
Ответ написан
Комментировать
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Нужны библиотеки. Гуглите v4l2, pipewire.
Напрямую с драйверами или тем более свой драйвер с USB протоколами вы писать замучаетесь.
Ответ написан
@Viilture
Разработчик С/С++/Python (Desktop/Embedded)
Насколько я знаю OpenCV Не имеет функционала получения видео. Она использует кодеки вроде VLC, FFMEPG, Gstreamer.
Исходники большинства кодеков доступны и лежат гитлабах, гитхабах, вы их легко найдете. Там весь этот исходный код есть.
Но для использования в продуктах вручную ничего писать не советую, вы очень много чего не учтете. На это нужны годы и тысячи пользователей вашей библиотеки.
А если вы хотите изучить это для опыта, то советую разобрать протокол RTSP. Веб камеры мало где применяются, а все остальные камеры обычно используют RTSP, UDP или Http протокол.
RTSP насколько я представляю работает так: На камере ставить RTSP сервер, клиент на удаленной программе подключается к этому серверу и может отправить команду PLAY - начать проигрывание, после чего сервер начинает непрерывно посылать клиент кадры(Обычно сжатые), STOP, PAUSE.
по UDP с камеры просто идут картинки в сжатом или не сжатом виде. Это быстро, но ошибки передачи не как не исправляются, иногда видео будет моргать.
по HTPP также, как под UDP просто на GET запрос в ответ присылают картинки в ответ.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы