>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

Frontend Backend Mobilne DevOps AI / ML GameDev Blockchain Systemy wbudowane Bezpieczeństwo
C-plus-plus

Jak Zamienić Stary Android w Krystalicznie Czysty Webcam dla Windows Bez Reklam i Znaków Wodnych

Kupowanie przyzwoitej zewnętrznej kamery internetowej dzisiaj to wątpliwa przyjemność. Budżetowe modele oferują rozmazane obrazki w 720p z tragicznym zakresem dynamicznym, podczas gdy przyzwoite opcje, takie jak rozwiązania Logitech, kosztują nieprawdopodobne pieniądze. Tymczasem większość z nas ma stary smartfon zalegający w szufladzie biurka, którego optyka i sensor znacznie przewyższają możliwości jakiejkolwiek kamery internetowej do biura.

Zazwyczaj próba użycia telefonu jako kamery internetowej napotyka na oprogramowanie własnościowe jak DroidCam czy Iriun. Darmowe wersje albo ograniczają rozdzielczość, albo nakładają znaki wodne bezpośrednio na wideo, albo ciągle wyświetlają reklamy. Ostatnio odkryłem projekt open-source o nazwie VCamdroid, którego twórcy rozwiązali ten problem bezpośrednio, bez niepotrzebnych komercyjnych dodatków.

VCamdroid Demo

Co pod maską

Projekt składa się z dwóch części: aplikacji Kotlin na Androida i klienta C++ na Windows. Zasada działania jest dość elegancka.

Telefon przechwytuje strumień przez Camera2 API, przetwarza klatki w locie przez shadery OpenGL (rotacja, odbicie lustrzane, korekcja kolorów i ekspozycji odbywa się tam), a wynik przekazuje do sprzętowego enkodera MediaCodec w H.264 lub H.265. Biblioteka RootEncoder zajmuje się pakowaniem strumienia wideo do RTP, po czym telefon uruchamia serwer RTSP.

Pipeline

Po stronie Windows klient łączy się ze strumieniem przez FFmpeg, dekoduje klatki i wysyła je do wirtualnego urządzenia DirectShow. Wykorzystuje to bibliotekę Softcam, która rejestruje sterownik softcam.dll. Każdy program na PC — czy to OBS, Zoom, Telegram czy Discord — widzi smartfon jako zwykłą fizyczną kamerę internetową USB.

Połączenie przewodowe i bezprzewodowe

Możesz przesyłać obraz na dwa sposoby:

  1. Przez Wi-Fi. Komputer i telefon muszą być w tej samej podsieci. Otwórz zakładkę Connect w aplikacji desktopowej, aby zobaczyć kod QR, skieruj na niego kamerę telefonu, potwierdź połączenie i transmisja się rozpoczyna.
  2. Przez USB przez ADB. To główny i najbardziej niezawodny scenariusz. Przez kabel opóźnienie jest minimalne, a sygnał nie cierpi od zatłoczonego pasma 2,4 GHz sąsiadującymi routerami.

Network

Ciekawy szczegół inżynieryjny: narzędzie ADB może przekierowywać porty tylko przez TCP. Domyślnie RTSP często przesyła pakiety RTP przez UDP, ale tutaj strumień jest tunelowany ściśle przez tryb przeplatany TCP. Daje to stabilny kanał bezpośrednio przez localhost bez utraty pakietów.

Co czyni ten projekt interesującym w praktyce

W przeciwieństwie do rozbudowanych rozwiązań, VCamdroid konfiguruje się szybko i nie wymaga zakładania kont.

Oto co potrafi ta kombinacja:

  • Przełączanie między przednim i tylnym modułem kamery bezpośrednio z PC podczas rozmowy.
  • Kontrola latarki, zoomu, ekspozycji i balansu bieli.
  • Przyspieszane sprzętowo przetwarzanie obrazu na GPU telefonu, więc procesor komputera jest minimalnie obciążony.
  • Podłączanie wielu telefonów jednocześnie. Możesz powiesić jeden smartfon na szeroki kadr, skierować drugi na twarz i przełączać się między nimi.

Obraz jest czysty, z prawdziwym 1080p i 60 fps, jeśli sensor telefonu to obsługuje.

Szybki start

Będziesz potrzebować Windows 10 lub 11 na PC i Android 7.0 lub nowszego na telefonie.

Najpierw skonfiguruj Windows:

  1. Pobierz archiwum ze strony Releases w repozytorium.
  2. Wypakuj i uruchom install.bat jako administrator. Ten skrypt rejestruje filtr DirectShow w systemie.
  3. W oknie Zapory Windows allow aplikacji dostęp zarówno dla sieci prywatnych, jak i publicznych.

Następnie zainstaluj klienta na telefonie:

  1. Włącz Tryb Dewelopera na Androidzie (stuknij numer kompilacji w ustawieniach telefonu siedem razy) i aktywuj przełącznik Debugowanie USB.
  2. Podłącz telefon do komputera kablem i uruchom skrypt install_apk.bat. Automatycznie przesyła on APK na urządzenie przez ADB.

Po tym otwórz VCamdroid na komputerze, uruchom aplikację na smartfonie, a automatycznie się znajdą przez kabel.

Kompilacja ze źródeł

Jeśli chcesz zagłębić się w kod lub dodać potrzebną funkcję, projekt buduje się standardowymi narzędziami.

Do części Android potrzebujesz świeżego Android Studio. Cała logika przechwytywania i strumieniowania jest spakowana w katalogu android/.

Do klienta Windows potrzebujesz Visual Studio i menedżera pakietów vcpkg. Zależności pobierają się jednym poleceniem:

vcpkg install wxwidgets:x64-windows ffmpeg:x64-windows
vcpkg integrate install

Następnie zbuduj bibliotekę softcam, otwórz windows/VCamdroid.sln, wybierz konfigurację Release x64 i skompiluj projekt.

Ograniczenia i niedociągnięcia

Projekt ma około 400 gwiazdek na GitHub, a kod jest w niektórych miejscach jeszcze stosunkowo świeży. Jeśli masz rzadkie lub specyficzne firmware Androida, MediaCodec może zachowywać się niestabilnie.

Czasami Zapora Windows dyskretnie blokuje ruch RTSP podczas pracy przez Wi-Fi. W takim przypadku musisz ręcznie grzebać w ustawieniach Defendera lub sprawdzać pingi przez adb shell ping. Weź też pod uwagę, że filtr DirectShow wymaga aktualnych bibliotek Visual C++ Redistributable na PC, w przeciwnym razie aplikacja po prostu się zawiesi bez znaczącego błędu.

VCamdroid to świetne rozwiązanie dla każdego, kto ma dość jakości wbudowanych kamer internetowych w laptopach lub nie chce wydawać pieniędzy na osobna optykę do sporadycznych rozmów. Projekt jest całkowicie darmowy, open-source na licencji MIT, bez ograniczeń czasowych i bez znaków wodnych. Jeśli masz stary smartfon z przyzwoitym aparatem zalegający na półce, to świetny sposób, by przywrócić go do użytku.

Powiązane projekty