古いAndroid端末を広告や透かしなしでWindows用高画質Webカメラに変える方法
現在、ちゃんとした外付けWebカメラを買うのは考えものです。安価なモデルは720pでぼやけた映像と最悪のダイナミックレンジしか提供せず、Logitechのようなまともなオプションは法外な価格です。一方、引き出しに埃をかぶっている古いスマートフォンをほとんど所有人都が持っています。その光学系とセンサーは事務用Webカメラを大幅に上回ります。
通常、スマートフォンをWebカメラとして使用しようとすると、DroidCamやIriunのようなproprietaryソフトウェアにぶつかります。無料バージョンでは解像度限制了、映像の上に透かしを入れたり、絶えず広告が表示されます。最近、VCamdroidというオープンソースプロジェクトを発見しました。制作者たちがこの問題を直接的に解決し、不要な商用サービスを排除してくれました。
内部構造
このプロジェクトは2つの部分で構成されています:Kotlin AndroidアプリとC++ Windowsクライアント。動作原理は非常に優雅です。
スマートフォンはCamera2 APIを通じてストリームをキャプチャし、OpenGLシェーダーでフレームをリアルタイムで処理します(回転、ミラーリング、色と露出の補正がそこで行われます)。MediaCodecハードウェアエンコーダーに結果を供給し、H.264またはH.265でエンコードします。RootEncoderライブラリはビデオストリームをRTPにパッケージ化し、その後スマートフォンはRTSPサーバーを起動します。
Windows側では、クライアントはFFmpeg経由でストリームに接続し、フレームをデコードして、仮想DirectShowデバイスに送信します。これはSoftcamライブラリを使用し、softcam.dllドライバーを登録します。PC上のOBS、Zoom、Telegram、Discordなどのどのプログラムも、スマートフォンを通常の物理的なUSB Webカメラとして認識します。
有線と無線の接続
ビデオストリーミングは2つの方法で可能です:
- Wi-Fi経由。コンピュータとスマートフォンは同じサブネット上にある必要があります。デスクトップクライアントのConnectタブを開いてQRコードをスキャンし、スマートフォンのカメラで読み取り、接続を確認するとブロードキャストが開始されます。
- USB経由のADB。これは主要な最も信頼できるシナリオです。ケーブル経由では遅延が最小限で、隣人のルーターが使う2.4 GHz帯域の輻輳による信号劣化がありません。
興味深い技術的詳細:ADBユーティリティはTCP経由でのみポート転送できます。デフォルトでは、RTSPはUDP経由でRTPパケットをシャトルすることがよくありますが、ここではストリームはTCPインタリーブドモード経由で厳密にトンネリングされています。これにより、パケットロスなしでlocalhost経由で安定したチャネルが得られます。
このプロジェクトが実践的に興味深い点
かさばるソリューションとは異なり、VCamdroidは素早くセットアップでき、アカウントが不要です。
この組み合わせでできること:
- 通話中にPCから直接前面と背面のカメラモジュールを切り替える
- フラッシュライト、ズーム、露出、ホワイトバランスを制御する
- スマートフォンのGPUでのハードウェアアクセラレーテッド画像処理により、コンピュータのプロセッサへの負荷が最小限
- 複数のスマートフォンを同時に接続可能。1台をワイドショット用、もう1台を顔に向け、切り替えることができる
映像はクリーンで、お使いのスマートフォンのセンサーがサポートしていれば、真の1080pと60fpsが可能
クイックスタート
PCにはWindows 10または11、スマートフォンにはAndroid 7.0以降が必要です。
まず、Windowsを設定します:
- リポジトリのReleasesページからアーカイブをダウンロードします。
- 展開して
install.batを管理者として実行します。このスクリプトはDirectShowフィルターをシステムに登録します。 - Windows Firewallウィンドウで、プライベートネットワークとパブリックネットワークの両方でアプリへのアクセスを許可します。
次に、スマートフォンにクライアントをインストールします:
- AndroidでDeveloperモードを有効にします(スマートフォンの設定でビルド番号を7回タップ)し、USB Debuggingトグルをアクティブにします。
- スマートフォンをケーブルでコンピュータに接続し、
install_apk.batスクリプトを実行します。ADB経由でAPKをデバイスに自動的にプッシュします。
その後、PCでVCamdroidを開き、スマートフォンでアプリを起動すると、ケーブル経由で自動的に互いに検出されます。
ソースからのビルド
コードを読み込んで必要な機能を追加したい場合は、標準的なツールでプロジェクトをビルドできます。
Android部分には新鮮なAndroid Studioが必要です。すべてのキャプチャとストリーミングロジックはandroid/ディレクトリにバンドルされています。
WindowsクライアントにはVisual Studioとvcpkgパッケージマネージャーが必要です。依存関係は1つのコマンドで取得されます:
vcpkg install wxwidgets:x64-windows ffmpeg:x64-windows
vcpkg integrate install
次にsoftcamライブラリをビルドし、windows/VCamdroid.slnを開き、Release x64構成を選択してプロジェクトをコンパイルします。
制限事項と粗い部分
プロジェクトはGitHubで約400スターがあり、コードはまだ比較的新しい 部分もあります。まれで特定のAndroidファームウェアをお持ちの場合、MediaCodecが不安定に動作する可能性があります。
Wi-Fi経由で作業しているとき、Windows FirewallがRTSPトラフィックをサイレントにブロックすることがあります。この場合、Defender設定を手動で掘り下げるか、adb shell pingでpingを確認する必要があります。また、PC上に最新のVisual C++ Redistributableライブラリがないと、DirectShowフィルターは意味のあるエラーなしでクラッシュするだけなので覚えておいてください。
VCamdroidは、内蔵のノートパソコンWebカメラの品質に厌倦した人や、散発的な通話用に別々の光学機器にお金をかけたくない人にとって最適な選択肢です。このプロジェクトは完全に無料で、MITライセンスの下でオープンソースであり、時間制限も透かしもありません。引き出しに埃をかぶっている良好なカメラを備えた古いスマートフォンをお持ちなら、これを再び活用する素晴らしい方法です。
関連プロジェクト