Обычное дело: мы используем cookie. Здесь можно узнать зачем
Хорошо

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

Разработка десктопного приложения и драйверов виртуальной камеры для Windows для системы видео стриминга
Совместимость с любыми приложениями видеовызовов и стриминга
Гибкое управление настройками камеры
Захват с помощью WebRTC видео с мобильного устройства через QR-код

Введение

Индустрия бытовой электроники и развлечений не стоит на месте, постоянно предлагая новые гаджеты для самых разных целей — общения, ведения блогов, маркетинга.
Азиатская компания предлагает устройство, способное превратить самый обычный смартфон в камеру для стриминга. Приспособление может постоянно удерживать человека в центре видеокадра, отслеживать положение пользователя и вращаться вокруг своей оси на 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++
для разработки драйверов.
Electron
для создания приложения.
WiFi и 4G
для работы в сети.
WebRTC
протокол для видео стриминга.
Windows Driver Kit
для разработки драйверов.
NSIS (Nullsoft Scriptable Install System)
для создания установщика Windows.

Итоги

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