Программирование ARM V4L: практическое руководство Wed, October 22 2025  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


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
[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: вывод подсказки по командам. Сокращенная справка:

$ v4l2-ctl --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.

 

Добавить комментарий


Защитный код
Обновить

Top of Page