Как стать автором
Обновить

Ваш телефон – секретное оружие: Как превратить его в веб-камеру и оживить ваши онлайн-встречи! (Если у вас Linux)

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров9.6K

Что объединяет удаленного сотрудника, на долю которого выпало много видеозвонков, зарождающуюся звезду YouTube и начинающего стримера? Все они, рано или поздно, осознают неотъемлемую важность повышения качества изображения, которое предоставляется их зрителям. А еще у них наверняка есть какой-нибудь Xiaomi Nano Porridge 10 Pro с довольно неплохой матрицей. И я не исключение, бросив вызов этой проблеме по-программистски и постаравшись обойтись без больших финансовых затрат, решением которой и хочу поделиться с вами. Добро пожаловать под кат!

Гифка из интернета
Гифка из интернета

Дано

  • Рабочая машина на Linux

  • Телефон с камерой

  • USB кабель

TL;DR

Идея проста, мы собираемся пробросить поток с камеры телефона на нашу рабочую лошадку и привязать его к виртуальному девайсу, который мы потом сможем выбирать как камеру в приложениях. Для подключения к телефону я буду использовать adb, для получения потока видео scrcpy, для создания виртуальной камеры в системе v4l2loopback

Установка

ADB

Ubuntu/Debian

sudo apt update
sudo apt -y install android-tools-adb

Arch

pacman -S android-udev

Scrcpy

Ubuntu/Debian

sudo apt install ffmpeg libsdl2-2.0-0 adb wget \\
                 gcc git pkg-config meson ninja-build libsdl2-dev \\
                 libavcodec-dev libavdevice-dev libavformat-dev libavutil-dev \\
                 libswresample-dev libusb-1.0-0 libusb-1.0-0-dev
sudo apt install scrcpy

Arch

pacman -S scrcpy

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

Установка из репозитория

В том случае, если вы хотите последнюю версию или собранный бинарник оказался с проблемой, которую решили в одном из новых релизов

git clone <https://github.com/Genymobile/scrcpy>
cd scrcpy
./install_release.sh

Сборка вручную

Тык

v4l2loopback-utils

Ubuntu/Debian

sudo apt install v4l2loopback-dkms
sudo apt install v4l2loopback-utils

Arch

pacman -S v4l2loopback-dkms
pacman -S v4l2loopback-utils

Подключаем устройство

  • Включаем на телефоне USB debugging

  • Подключаем телефон к компьютеру по USB и вводим следующую команду и убеждаемся, что он в нашем поле зрения

adb devices

Если вывод из консоли содержит no permissions

adb devices
List of devices attached 
4df15d6e02a55f15    device
????????????    no permissions

То идем сюда

Wifi

  • Подключаем телефон к той же сети, в которой находится компьютер

  • Подключаем телефон к компьютеру по USB и вводим

adb tcpip 5555
  • Отключаем телефон от USB

  • Узнаем IP адрес нашего телефона. Например, так Settings > About tablet (or About phone) > Status > IP address

  • Подключаемся к телефону по его IP адресу

adb connect device_ip_address:5555
  • Убеждаемся, что телефон подключен

adb devices
List of devices attached
device_ip_address:5555 device

Для большей информации можно сюда

Создаем виртуальный девайс

sudo modprobe v4l2loopback devices=1 video_nr=22 exclusive_caps=1 card_label="Virtual Webcam"

Это создаст новый видео девайс /dev/video22 . Вы можете определить номер девайса на ваше усмотрение и вкус.

Смотрим, что наш девайс создался:

v4l2-ctl --list-devices

Магия!

Стартуем scrcpy . Он подключается к единственному подключенному устройству по умолчанию:

scrcpy -m1920 --v4l2-sink=/dev/video22 --video-source=camera --no-audio

Заходим в любое приложение, позволяющее протестировать камеру, и сидим довольные!

Если выдается следующая ошибка:

[server] ERROR: Encoding error: android.media.MediaCodec$CodecException: start failed
WARN: Device disconnected
[server] ERROR: Exception on thread Thread[video,5,main]

Это значит, что вам надо поставить меньшее разрешение. Сделать это можно напрямую через параметр --camera-size=1920x1080 или используя -m/--max-size , например -m1920 , -m1080

Дополнительные настройки

  • Подключиться к телефону по его серийному номеру

--serial=device_serial
  • Убрать открывающееся окно с видео

--no-video-playback
  • Посмотреть доступные камеры:

scrcpy --list-cameras
scrcpy --list-camera-sizes
  • Указать, с какой камеры будет браться поток:

--camera-id=0
  • Указать размер выходного потока:

--camera-size=1840x444
-m1920
-m1920
-m1080
  • Повернуть камеру на определенный угол:

--orientation=90
  • FPS

--camera-fps=60

Теги:
Хабы:
Всего голосов 36: ↑36 и ↓0+36
Комментарии27

Публикации

Истории

Ближайшие события

Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург