Как превратить старый Android в четкую веб-камеру для Windows без рекламы и водяных знаков
Репозиторий давно не обновлялся
Последнее обновление было 7 месяцев назад.
Купить нормальную внешнюю веб-камеру сегодня — сомнительное удовольствие. Бюджетные модели выдают мыльную картинку в 720p с ужасным динамическим диапазоном, а нормальные устройства вроде решений от Logitech стоят неразумных денег. При этом у большинства из нас в ящике стола пылится старый смартфон, оптика и матрица которого в разы превосходят любую офисную вебку.
Обычно попытка завести телефон как веб-камеру упирается в проприетарный софт вроде DroidCam или Iriun. В бесплатных версиях там либо режут разрешение, либо лепят водяные знаки прямо поверх видео, либо постоянно крутят баннеры. Недавно я наткнулся на открытый проект VCamdroid, создатели которого решили эту проблему прямо и без лишней коммерческой мишуры.
Что под капотом
Проект состоит из двух частей: Android-приложения на Kotlin и клиентской части для Windows на C++. Принцип работы достаточно элегантный.
Телефон захватывает поток через Camera2 API, на лету прогоняет кадры через шейдеры OpenGL (там происходят поворот, зеркалирование, коррекция цвета и экспозиции) и скармливает результат аппаратному энкодеру MediaCodec в H.264 или H.265. За упаковку видеопотока в RTP отвечает библиотека RootEncoder, после чего телефон поднимает RTSP-сервер.
На стороне Windows клиент цепляется к потоку через FFmpeg, распаковывает кадры и отправляет их в виртуальное устройство DirectShow. Для этого используется библиотека Softcam, которая регистрирует драйвер softcam.dll. Любая программа на ПК — будь то OBS, Zoom, Telegram или Discord — видит смартфон как обычную физическую USB-камеру.
Связь по проводу и воздуху
Стримить видео можно двумя способами:
- По Wi-Fi. Компьютер и телефон должны находиться в одной подсети. В десктопном клиенте открывается вкладка Connect с QR-кодом, вы наводите камеру телефона, подтверждаете подключение, и трансляция запускается.
- По USB через ADB. Это основной и самый надежный сценарий. По кабелю задержка минимальна, а сигнал не страдает от забитого соседскими роутерами диапазона 2.4 ГГц.
Интересный инженерный нюанс: утилита ADB умеет пробрасывать порты только по протоколу TCP. По умолчанию RTSP часто гоняет RTP-пакеты через UDP, но здесь поток туннелируется строго через TCP interleaved mode. В итоге мы получаем стабильный канал прямо через localhost без потерь пакетов.
Чем проект интересен на практике
В отличие от громоздких решений, VCamdroid настраивается быстро и не требует аккаунтов.
Вот что умеет связка:
- Переключение между фронтальным и основным модулем прямо с ПК во время звонка.
- Управление фонариком, зумом, экспозицией и балансом белого.
- Аппаратная обработка картинки на GPU смартфона, благодаря чему процессор компьютера почти не нагружается.
- Подключение нескольких телефонов одновременно. Можно повесить один смартфон на общий план, второй направить на лицо и переключаться между ними.
Картинка получается чистой, с честными 1080p и 60 кадрами в секунду, если возможности сенсора вашего телефона это поддерживают.
Быстрый запуск
Для работы на ПК потребуется Windows 10 или 11, а на телефоне — Android версии 7.0 или новее.
Сначала настраиваем Windows:
- Скачиваем архив со страницы Releases репозитория.
- Распаковываем и запускаем
install.batот имени администратора. Этот скрипт регистрирует DirectShow-фильтр в системе. - В окне брандмауэра Windows разрешаем приложению доступ как для частных, так и для публичных сетей.
Дальше ставим клиент на телефон:
- Включаем режим разработчика на Android (семь раз тапаем по номеру сборки в настройках телефона) и активируем переключатель USB Debugging.
- Подключаем телефон к компьютеру кабелем и запускаем скрипт
install_apk.bat. Он автоматически зальет APK-файл на устройство через ADB.
После этого открываем VCamdroid на компьютере, запускаем приложение на смартфоне, и они автоматически находят друг друга по кабелю.
Сборка из исходников
Если вы хотите поковырять код или дописать нужную фичу, проект собирается стандартными инструментами.
Для Android-части нужен свежий Android Studio. Вся логика захвата и стриминга собрана в каталоге android/.
Для Windows-клиента понадобятся Visual Studio и менеджер пакетов vcpkg. Зависимости подтягиваются одной командой:
vcpkg install wxwidgets:x64-windows ffmpeg:x64-windows
vcpkg integrate install
Затем собираем библиотеку softcam, открываем windows/VCamdroid.sln, выбираем конфигурацию Release x64 и компилируем проект.
Ограничения и шероховатости
У проекта около 400 звезд на GitHub, и код местами еще свежий. Если у вас редкая или специфическая прошивка Android, MediaCodec может вести себя нестабильно.
Иногда брандмауэр Windows молча блокирует RTSP-трафик при работе по Wi-Fi. В этом случае приходится лезть в настройки защитника руками или проверять пинги через adb shell ping. Также важно помнить, что для работы DirectShow-фильтра на ПК должны стоять свежие библиотеки Visual C++ Redistributable, иначе приложение просто вылетит без внятной ошибки.
VCamdroid отлично подойдет тем, кому надоело качество встроенных веб-камер на ноутбуках или кто не хочет тратить деньги на отдельную оптику для редких созвонов. Проект полностью бесплатный, с открытым кодом под лицензией MIT, без ограничений по времени работы и водяных знаков. Если у вас на полке скучает старый смартфон с приличной камерой, это отличный способ вернуть его в строй.
