В этой статье (перевод [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
[0]: 'MJPG' (Motion-JPEG, compressed)
[1]: 'YUYV' (YUYV 4:2:2)
Опция --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
[0]: 'MJPG' (Motion-JPEG, compressed)
Size: Discrete 720x480
Interval: Discrete 0.040s (25.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.040s (25.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Size: Discrete 480x320
Interval: Discrete 0.040s (25.000 fps)
[1]: 'YUYV' (YUYV 4:2:2)
Size: Discrete 480x320
Interval: Discrete 0.040s (25.000 fps)
--set-ctrl -d0 brightness=128: установит значение яркости 128 на устройстве dev/video0.
--help: вывод подсказки по командам. Сокращенная справка:
Подробная документация:
$ man v4l2-ctl
$ info v4l2-ctl
Практические примеры использования v4l2-ctl см. [4], а также Q53, Q59 [5].
[Ссылки]
1. V4L: A Complete Practical Tutorial site:medium.com. 2. man v4l2-ctl. 3. LuckFox Pico Buildroot Configuration. 4. Подключение камеры к LuckFox Pico через USB. 5. LuckFox FAQ. |