Разработка драйверов виртуальной камеры и десктопного приложения для Windows

Разработка десктопного приложения и драйверов виртуальной камеры для Windows для системы видео стриминга
Индустрия бытовой электроники и развлечений не стоит на месте, постоянно предлагая новые гаджеты для самых разных целей — общения, ведения блогов, маркетинга.

Азиатская компания предлагает устройство, способное превратить самый обычный смартфон в камеру для стриминга. Приспособление может постоянно удерживать человека в центре видеокадра, отслеживать положение пользователя и вращаться вокруг своей оси на 360 градусов в автоматическом режиме. Мобильное приложение предоставляет пользователю основной функционал системы.

После сопряжения устройства и мобильного гаджета все готово к работе. Пользователю доступны основные функции, такие как выбор активной камеры, выбор режима слежения (лицо/форма/без слежения), выбор положения объекта в кадре и регулировка яркости.

Пользователь может выбрать режим отслеживания лица. В этом случае искусственный интеллект автоматически обнаружит лицо в кадре и будет контролировать движение объекта.

Режим следования за объектом позволяет выбрать объект в кадре, за которым камера будет следить. Кроме того, есть режим отслеживания верховой езды.

Всю обработку видео берет на себя программное обеспечение, поэтому гаджет требует минимального участия пользователя, с ним легко и удобно работать.

Это устройство актуально для видеоконференций и прямых трансляций, тем более, что позволяет владельцу свободно передвигаться по локации, не беспокоясь о том, что он может выйти из кадра.

Запрос

На момент обращения в КЕДР Solutions у заказчика имелось работающее мобильное приложение, обеспечивающее основной функционал системы.

Нашим разработчикам предстояло создать драйверы виртуальной камеры (аудио и видео) и десктопное приложение.

Пользователь должен иметь возможность выбрать эту виртуальную камеру в качестве источника видео в любом приложении для видеовызовов.

Драйвер должен работать со Skype, Zoom, Google Hangouts, YouTube, Facebook и десятками других приложений.

Решение

Работа над проектом состояла из трех параллельных процессов – создания видео-драйвера, создания аудио-драйвера и разработки настольного приложения.

Аудио- и видео-драйверы для виртуальной камеры написаны на C/C++.

Фильтр DirectShow принимает на вход видеопотоки от WebRTC.

Windows SDK C++ API предоставляет необходимые функции.

Видео-драйвер обеспечивает управление камерой через десктопное приложение:

1. Регулировка яркости, контрастности и цвета

2. Управление частотой кадров

3. Управление настройками видео

4. Управление разрешением камеры

Пользователь может вести прямую трансляцию на Facebook, Twitch и YouTube. Соединение RTMP поддерживается непосредственно между мобильным приложением и видеоплеером, обеспечивая бесперебойную потоковую передачу видео независимо от колебаний пропускной способности.

5. Запись видео

Пользователь может выбрать видеокодер, ширину видеопотока, формат записи, предустановленные настройки и качество звука.
Дизайн настольного приложения для системы видео-стриминга
Предварительный дизайн десктопного приложения
Мобильное приложение, используя WebRTC, подключается к разработанному программному обеспечению с помощью QR-кода. Мобильное приложение анализирует QR-код, созданный настольным приложением.

Мобильное приложение получает URL-адрес и подключается к нему, добавляя свой маркер доступа к параметру запроса. Затем настольное приложение получает маркер доступа и информацию о пользователе для сеанса передачи данных.

Данные отправляются в событие RTC и могут быть получены подключенными пользователями (за исключением самого клиента).

Так как мониторы ПК имеют разные размеры, иногда видео не помещается на экране и может быть обрезано. Чтобы избежать этого, мы создали адаптивный видеоконтейнер, пропорциональный размеру экрана. Теперь, какой бы ни был размер монитора ПК, видеоконтейнер адаптирует видео под него.

Сложности проекта и их решение

Поскольку для разработки драйверов использовался C/C++, наша команда намеревалась разработать настольное приложение с помощью фреймворка Qt и на языке C++.

Оказалось, что библиотеки Qt не могут эффективно работать с клиентским бэкендом. Наша команда попробовала решение на основе фреймворка Electron. Мы подключили среду Node.js (т.к. на ней основан Electron) к серверной части, и это подключение прошло успешно.

Ввиду особенностей фреймворка Electron, нашей команде пришлось потрудиться, чтобы решить проблему с демультиплексором. Функция декодирования не работала должным образом. Электрон выводил аудио и видео в один и тот же буфер, поэтому нам пришлось самостоятельно анализировать потоковое мультимедиа.

В итоге нам удалось реализовать все задуманное и получить рабочую версию приложения.
Выполненные работы

  • Разработка видеодрайвера
  • Разработка аудиодрайвера
  • Создание десктопного приложения
                Использованные технологии
                • Приложение написано на C++ и JavaScript.
                • Мы использовали C/C++ для разработки драйверов.
                • Наше десктопное приложение создано для операционной системы Windows.
                • Мы использовали фреймворк Electron для создания приложения.
                • Для работы в сети используются WiFi и 4G.
                • Применили протокол WebRTC для видео стриминга.
                • Windows Driver Kit использован для разработки драйверов.
                • NSIS (Nullsoft Scriptable Install System) использовался для создания установщика Windows.

                                  Итоги

                                  Команда КЕДР Solutions разработала драйверы и приложение для Windows для захвата WebRTC-видео из мобильного приложения клиента и его передачи другим приложениям в виде стандартного видео.
                                  Размер экрана:
                                  до 1920X1080
                                  Поддерживает:
                                  WebRTC