V4L: практическое руководство |
![]() |
Добавил(а) microsin |
В этой статье (перевод [1]) обсуждается приложение V4L (сокращение от Video4Linux), это интерфейс ядра, предоставляющий доступ к видеоустройствам, таким как web-камеры, streaming media и другие устройства захвата мультимедийных данных в системах Linux. Это стандартный API для захвата и вывода видео на платформах Linux. [Введение в V4L] Video4Linux - фреймворк, предоставляющий API для управления видеоустройствами в ядре Linux. Это позволяет приложениям взаимодействовать с устройствами video, такими как web-камеры, TV-тюнеры, карты захвата видео, и предоставляет стандартный интерфейс для захвата и манипулирования кадрами видео из этих устройств. V4L существует уже много лет и развивается через различные версии, при этом текущая версия является V4L2. Поскольку V4L2 представляет собой интерфейс уровня ядра, он поставляется предустановленным в большинстве современных дистрибутивов Linux (в том числе и в дистрибутивах встраиваемых систем, таких как Linux Buildroot [3]). V4L2 предоставляет набор инструментов и утилит, который упрощают конфигурирование и тестирование видеоустройств. Это также предоставляет поддержку для различных форматов video, включая MPEG-2, MPEG-4, и H.264. Также предоставляется набор API для приложений, которым нужно управлять видеоустройствами. Эти API позволяют приложениям установить параметры video, такие как разрешение (resolution), частота кадров (frame rate) и формат кодирования цвета (color format). Утилиты Gstreamer, OpenCV и FFMPEG предоставляют поддержку V4L2. У них есть плагины V4L2 или API-функции, которые позволяют им захватывать и обрабатывать video из V4L2-совместимых устройств. [Команды V4L для взаимодействия с видеоустройствами] Существует несколько пакетов, предоставляющих для V4L2 утилиты и библиотеки уровня пользователя. Один из них v4l-utils. v4l-utils. Это коллекция утилит командной строки, которые позволят вам управлять устройствами V4L2 и захватывать video-потоки. Устанавливаются эти утилиты командой: $ sudo apt install v4l-utils
После этого в системе появится приложение v4l2-ctl, которое управляет драйверами V4L. v4l2-ctl. Эта команда используется для управления устройствами V4L2 из командной строки. Она позволяет запрашивать возможности устройства, задавать параметры устройства, а также захватывать видео и неподвижные изображения. Вот некоторые опции командной строки v4l2-ctl (см. также man v4l2-ctl [2]): --list-devices: выведет список всех доступных устройств V4L2 в системе. -d, --device < device>: указывает устройство, с которым работает команда. -l, --list-ctrls: список всех элементов управления, доступных для устройства. -c, --set-ctrl < control>=< value>: установит значение элемента управления. --version: выведет версию. -V: покажет текущий видеоформат V4L2-устройства. Опция -V это сокращение для опции --get-fmt-video, которая получает текущий формат video для выбранного устройства. $ v4l2-ctl -d0 -V
Format Video Capture:
Width/Height : 640/480
Pixel Format : 'MJPG' (Motion-JPEG)
Field : None
Bytes per Line : 0
Size Image : 614400
Colorspace : sRGB
Transfer Function : Rec. 709
YCbCr/HSV Encoding: ITU-R 601
Quantization : Default (maps to Full Range)
Flags :
Примечание: здесь -d0 также сокращенный вариант опции -d /dev/video0. Если в системе только одно видеоустройство, то опцию -d можно опустить. --list-formats: выведет список всех поддерживаемых форматов video и размеров кадра для указанного устройства. $ v4l2-ctl -d0 --list-formats
ioctl: VIDIOC_ENUM_FMT
Type: Video Capture
Опция --list-formats покажет только базовую информацию по каждому формату, которая может быть недостаточной, чтобы определить точные параметры video, необходимые для каждого частного случая использования. --list-formats-ext: эта команда также выведет список всех поддерживаемых форматов video, но предоставит больше данных по каждому формату, включая точный размер кадра (frame size), длительность кадра (frame interval) и частоту кадров (frame rate): $ v4l2-ctl -d0 --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
Type: Video Capture
--set-ctrl -d0 brightness=128: установит значение яркости 128 на устройстве dev/video0. --help: вывод подсказки по командам. Сокращенная справка: $ v4l2-ctl --help
Подробная документация: $ man v4l2-ctl
$ info v4l2-ctl
Практические примеры использования v4l2-ctl см. [4], а также Q53, Q59 [5]. [Ссылки] 1. V4L: A Complete Practical Tutorial site:medium.com. |