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

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

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

Они создали устройство отслеживания движений, которое работает в паре с любым смартфоном. Пользователь подключает свой телефон к устройству и запускает мобильное приложение. Приложение использует камеру телефона для фото- и видеосъемки.

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

Устройство отслеживания движения может вращаться на 360° по горизонтали и на 60° по вертикали. Мобильное приложение использует искусственный интеллект, чтобы распознавать объекты и следить за ними, управляя устройством.

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

Устройство также имеет автоматический зум, автоматическое выравнивание, отслеживание прогнозируемого направления и многое другое.

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

Запрос

У заказчика уже имелось готовое устройство и мобильное приложение.

Ему требовалось десктопное приложение для macOS, которое могло бы получать видео- и аудио-данные из мобильного приложения, обрабатывать их и передавать на виртуальную камеру. Затем виртуальная камера должна отправлять видео и аудио в другие приложения.

Нашей задачей была разработка такого приложения.

Еще одна задача заключалась в разработке видео- и аудио-драйверов macOS для виртуальной камеры. Драйверы должны были работать с широким спектром приложений и веб-сайтов, таких как Skype, Zoom, YouTube, Facebook и т.д.

Решение

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

Что касается настольного приложения, то на предыдущем этапе нашей совместной работы команда уже создала его версию для Windows с помощью C++ и JavaScript на платформе Electron.

Поскольку Electron — кроссплатформенный фреймворк, перенос приложения на maOS не составил труда. Нужно было лишь изменить подсистему интерфейса драйвера в приложении, чтобы она соответствовала новому API драйвера.

Вся система должна была работать следующим образом. Мобильное приложение на смартфоне управляет устройством отслеживания перемещений и отправляет мультимедийные данные (видео и аудио) в десктопное приложение по Wi-Fi.

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

Команда создала видео-драйвер, написав плагин виртуальной камеры DAL на платформе CoreMediaIO на языках Objective C и C++.
Изображение описывает, как устройство отслеживания движения передает сигнал для видео стриминга.
Плагин DAL служит виртуальной камерой, необходимой другим десктопным приложениям для потоковой передачи видео.

Драйвер позволяет настольному приложению управлять камерой, а именно яркостью, контрастностью, цветом, настройками видео и т.д.

Аудио-драйвер был разработан на платформах CoreAudio и IOKit на языках Objective C и C++.

Установочные пакеты настольного приложения и драйверы для macOS были созданы в формате PKG.

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

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

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

Еще одной проблемой была синхронизация потоков видео- и аудиоданных. Мы решили этот вопрос алгоритмически.

При разработке десктопного приложения мы столкнулись с некорректной работой демультиплексора. Также иногда видео не помещалось на экране. Обе эти проблемы были решены при разработке Windows-версии приложения.
Выполненные работы

  • Разработка macOS видео-драйвера
  • Разработка macOS аудио-драйвера
  • Разработка десктопного приложения
                Использованные технологии
                • Десктопное приложение разработано с помощью фреймворка Electron.
                • Приложение реализовано с использованием C++ и TypeScript.
                • Разработали видео- и аудио-драйверы, используя Objective C и C++.
                • Видео-драйвер реализован с помощью фреймворка CoreMediaIO.
                • Аудио-драйвер разработан с помощью фреймворков CoreAudio и IOKit.

                                  Итоги

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