Отправка ввода веб-камеры для увеличения с помощью записанного клипа

#linux #linux-kernel #video-streaming #webcam #virtual-webcam

Вопрос:

У меня есть идея, над которой я работал, но есть некоторые технические детали, которые я хотел бы понять, прежде чем продолжить.

Насколько я понимаю, Linux взаимодействует с базовым оборудованием через /dev/. Я возился со своим входом видеокамеры для увеличения и обнаружил, что кто-то объясняет, что мне нужно создать виртуальное устройство и подключить его к выходу другой программы под названием v4loop. Мои вопросы таковы

1 — Как Zoom определяет веб-камеры, доступные для ввода. В моем каталоге /dev есть 2 «файла» под названием video (/dev/video0 и /dev/video1), но zoom обнаруживает только одну веб-камеру. Осуществляется ли связь с веб-камерой через этот видеофайл или нет? Если да, то почему простое создание не влияет на выбор ввода масштабирования. Если нет, то как zoom определяет ввод и считывает канал веб-камеры?

2 — могу ли я создать виртуальное устройство и написать для него модуль ядра, который передает входные данные из локального файла. Я написал много модулей ядра, и я знаю, что у них есть методы чтения, записи и выпуска. Я хочу анализировать видео всякий раз, когда выдается запрос на чтение от zoom. Как должно быть закодировано видео? Это mp4, или формат raw, или что-то еще? Как быстро я должен отправлять входные данные (в килобайтах). Я думаю, что это функция моих спецификаций для записи с веб-камеры. Если это 1920×1080, и каждый пиксель составляет 3 байта (RGB), и он записывается со скоростью 20 кадров в секунду, я могу просто рассчитать, сколько байтов генерируется в секунду, но как Zoom ожидает, что в него будет вводиться ввод. Предполагая, что он отправляет поток в режиме реального времени, он должен считывать ввод каждые несколько миллисекунд. Как я могу получить доступ к такой информации?

Заранее спасибо. Это учебный эксперимент, я просто пытаюсь сделать что-то веселое, к чему у меня есть мотивация, и в то же время узнать больше о связи между Linux и оборудованием. Я все еще новичок, так что, пожалуйста, полегче со мной.

Ответ №1:

По-видимому, существует два типа файлов /dev/video*. Один для метаданных, а другой для фактического потока с веб-камеры. Создание виртуального устройства того же типа, что и поток, в каталоге /dev привело к тому, что Zoom распознал его как независимую веб-камеру, даже без создания файла метаданных. Наконец-то я добился того, чего хотел, но я использовал функцию виртуальной камеры OBS Studio, которая была добавлена после обновления 26.0.1, и до сих пор она работает отлично.