スマホをカメラにするFree

スマホは多くの場合ウェブカメラより優秀です — 専用アプリを入れれば、Hologramu がほかのカメラと同じように扱えるカメラデバイスになります。

仕組み

Hologramu 自身にスマホ接続の機能はありませんし、必要もありません。OS が知って いるカメラを開くだけです。スマホ側のアプリと PC 側の小さなプログラムが組になって 仮想カメラを作り、そこから先は USB ウェブカメラと同じようにデバイス一覧に 並びます。解像度もフレームレートも、ステージ上の位置も、ほかのカメラとの合成も そのまま使えます。

つまり Hologramu 側でやることは、それを選ぶことだけです。

ヒント: スマホは 2 台目のカメラとして特に強力です。横に置いてください。 正面のウェブカメラが左右と上下を、横のスマホが奥行き — 手をどれだけ前に出した か — を決めます。置いたらステージ上でもその位置に動かしてください。 カメラを選ぶも 参照。

どのアプリを使うか

方法スマホPC接続
DroidCamAndroid, iOSLinux, WindowsUSB または Wi-Fi
Iriun WebcamAndroid, iOSLinux, WindowsWi-Fi
接続されたカメラ(Phone Link)AndroidWindows 11 のみWi-Fi + Bluetooth
MJPEG ストリーム + ffmpeg配信できるアプリなら何でもLinux のみWi-Fi

DroidCam と Iriun は近道で、スマホ側・PC 側どちらの OS でも使えます。ffmpeg を 使う方法は他社製の PC クライアントが要りませんが、そのぶん手作業が増えます。

USB は Wi-Fi に勝ちます。 どちらでも動きますが、ケーブルのほうが映像は明らか に素直で、家の誰かが配信を始めても途切れず、しかもスマホが充電されます。トラッ キングでは解像度より遅延のほうが効きます。

Linux: 仮想カメラデバイスLinux

Linux では、PC 側のソフトがスマホの映像を書き込むためのデバイスが必要です。それ を用意するのがカーネルモジュール v4l2loopback です。ほかのプログラムからは カメラに見える /dev/video* を 1 つ増やしてくれます。

bash
# Arch, Manjaro, EndeavourOS
sudo pacman -S v4l2loopback-dkms v4l-utils

# Debian, Ubuntu, Linux Mint, Pop!_OS
sudo apt install v4l2loopback-dkms v4l-utils

# Fedora(RPM Fusion「free」を有効にしておくこと)
sudo dnf install akmod-v4l2loopback v4l-utils

# openSUSE
sudo zypper install v4l2loopback-kmp-default v4l-utils

v4l-utils は必須ではありませんが、デバイスが本当にあるかを確かめる v4l2-ctl が入っています。

注意: DKMS パッケージは動作中のカーネル用にモジュールをビルドするため、その ヘッダーが必要です。無いとビルドエラーで止まります。Arch: sudo pacman -S linux-headers(別のカーネルなら linux-zen-headers、 linux-lts-headers)。Debian/Ubuntu: sudo apt install linux-headers-$(uname -r)。

モジュールを読み込み、デバイスに名前を付けます。

bash
sudo modprobe v4l2loopback video_nr=10 card_label="Phone" exclusive_caps=1

これでデバイスは /dev/video10 になり、Hologramu には「Phone」として出てきます。 video_nr を省くと、モジュールが空いている番号を自分で選びます。

毎回の起動時に用意させるには:

bash
echo v4l2loopback | sudo tee /etc/modules-load.d/v4l2loopback.conf
echo 'options v4l2loopback video_nr=10 card_label="Phone" exclusive_caps=1' \
  | sudo tee /etc/modprobe.d/v4l2loopback.conf

確認:

bash
lsmod | grep v4l2loopback
v4l2-ctl --list-devices

メモ: exclusive_caps=1 を付けると、デバイスは実際に誰かが書き込んでいる ときだけカメラとして名乗ります。Hologramu は映像を出せないデバイスを隠すので、 仮想デバイスが一覧に現れるのはスマホとの接続ができてからです。順番は、 スマホのアプリを起動 → PC 側のプログラムを接続 → Hologramu でカメラを選ぶ、 となります。exclusive_caps=1 なしなら常に一覧に出ますが、何も送られていない 間は真っ黒な映像を返します。

スマホを USB でつなぐLinux

ケーブル接続のときだけ必要です。Wi-Fi ならどれも要りません。

bash
# Android(ADB)
sudo pacman -S android-tools        # Arch
sudo apt install adb                # Debian, Ubuntu
sudo dnf install android-tools      # Fedora
sudo zypper install android-tools   # openSUSE

# iPhone(usbmuxd)
sudo pacman -S usbmuxd              # Arch
sudo apt install usbmuxd            # Debian, Ubuntu
sudo dnf install usbmuxd            # Fedora
sudo zypper install usbmuxd         # openSUSE

Android では開発者向けオプションと、その中の USB デバッグを有効にする必要 があります。最初につないだとき、スマホがこのパソコンを信頼するか尋ねてきます。 iPhone はいつもの「このコンピュータを信頼」で十分です。

DroidCam を設定する

Android と iOS で動き、ケーブルでも Wi-Fi でもつながります。

  1. スマホに Play ストアまたは App Store から DroidCam を入れる。
  2. PC 用のクライアントを dev47apps.com から入手する。Arch では AUR パッケージ droidcam もあります。
  3. Linux クライアントを展開してインストール:
bash
cd /tmp
unzip droidcam_latest.zip -d droidcam
cd droidcam
sudo ./install-client
  1. DroidCam は独自のループバックモジュールも持っています(sudo ./install-video)。 すでに v4l2loopback を入れているなら不要です。両方あっても問題はなく、仮想 デバイスが 2 つになるだけです。
  2. スマホでアプリを開き、PC でクライアントを起動して USB か WiFi を選ぶ。 Wi-Fi ならアプリに IP アドレスが出るので、それを PC に入力します。

Iriun を設定する

接続は Wi-Fi のみですが、アドレスの入力は要りません。同じネットワークにいれば クライアントとスマホが自動で見つけ合います。

  1. スマホに Iriun Webcam を入れる(Android または iOS)。
  2. クライアントを iriun.com から入手する — .deb と .rpm があります。.deb は sudo apt install ./iriunwebcam-*.deb で入れると、 dpkg -i と違って依存関係も一緒に解決されます。
  3. v4l2loopback が前提です(上記参照)。
  4. 両方の機器を同じ Wi-Fi に置き、アプリとクライアントを開くだけで接続されます。

他社製クライアントなしで: MJPEG ストリームLinux

プロプライエタリなクライアントを入れたくない場合。多くのカメラアプリは、映像を そのまま Web アドレスとして公開できます — Android なら IP Webcam、iOS なら MJPEG や RTSP を出せるアプリです。アドレスはアプリに表示されます(例: http://192.168.1.42:8080/video)。ffmpeg でそれを仮想デバイスへ流し込みます。

bash
ffmpeg -i http://192.168.1.42:8080/video -vf format=yuv420p -f v4l2 /dev/video10

トラッキング中はこのウィンドウを開いたままにしておきます。ffmpeg の導入:

bash
sudo pacman -S ffmpeg        # Arch
sudo apt install ffmpeg      # Debian, Ubuntu
sudo dnf install ffmpeg      # Fedora(RPM Fusion)
sudo zypper install ffmpeg   # openSUSE(Packman)

メモ: ffmpeg は Hologramu に同梱されておらず、システムにある場合だけ使われ ます。音声付きのクリップを 1 つのファイルに録りたいなら、どのみち必要になります。

WindowsWindows

Windows にはモジュールもパッケージ管理も挟まりません。DroidCam・Iriun・Camo の クライアントは、インストール時に自分でカメラをシステムに登録します。あとは Hologramu のデバイス一覧に出てきます。

Windows 11 なら追加ソフトなしでもできます。設定の Bluetooth とデバイス → モバイルデバイス で、ペアリング済みの Android スマホを接続されたカメラとして 共有できます。最新の Windows 11、スマホ側の Windows にリンク アプリ、そして Bluetooth が有効であることが条件で、映像自体は Wi-Fi を通ります。iPhone 向けの 同等機能はないので、そちらは DroidCam・Iriun・Camo のままです。

Hologramu で選ぶ

アバターの トラッキング → カメラ で仮想デバイスを選びます。名前は自分で付けた もの、またはクライアント名(「DroidCam」「Iriun」)になります。

  • 映像(解像度 / フレームレート) — 仮想デバイスはたいてい 1 つの形式しか 出しません。設定は自動のままにして、解像度は生まれる場所、つまりスマホの アプリ側で決めてください。720p で十分です。MediaPipe はどのみち内部でもっと 小さく処理するので、画素が増えても帯域を食うだけです。
  • 角度と高さ — スマホが横にあったり三脚で頭より上にあるなら、ステージ上でも そこへドラッグしてください。トラッカーがその傾きを取り除き、アバターには渡し ません。
  • フレームレート — 解像度より重要です。毎秒 20 枚を切るあたりから、動きが 目に見えて重くなります。

うまくいかないとき

症状原因
一覧にデバイスが出ないスマホとの接続がまだできていない(上記の exclusive_caps=1 を参照)
それでも出ないモジュール未読み込み — lsmod で確認し、なければ sudo modprobe v4l2loopback
カーネル更新後に消えたDKMS で再ビルド: sudo dkms autoinstall、必要ならヘッダーを入れ直す
スマホと PC が互いを見つけないネットワークが別、ゲスト Wi-Fi、ルーターのクライアント分離
映像がカクつく・遅れる2.4 GHz の Wi-Fi、解像度が高すぎる — いっそ USB でつなぐ
映像が真っ黒のままほかのアプリがスマホのカメラを掴んでいる。配信アプリを再起動する

ヒント: 1 時間配信し続けたスマホは熱くなり、電池も空になります。ケーブルに すれば、その 2 つが一度に片付きます。