中華激安HDMIキャプチャ

LinuxMintで中華激安HDMIキャプチャを買ってみました。

PC側のインタフェースはUSB2.0またはUSB3.0、形状はドングル形状です。価格は約10ドル位。自分が買ったときはUSB2.0モデルだと10ドルを少し切って、USB3.0モデルは10ドルを少し超えました。USB3.0だと、FullHDで60fpsのキャプチャができる、という違いがありますが、普通の使い方ではあまり意味はないように思います。まあ、僅かな差なので、どう考えるかですが。
論理インターフェースの方は、UVC(USB Video Class)でPCからはカメラに見えるので、通常はOS側のドライバ無しで動作します。

Webサイトによっては「音声がモノラルになる」という記述も見かけたような気もしますが、LinuxMint 20.3環境では音声もステレオで(少なくともUSB3.0モデルは)キャプチャできました(が、問題があります)。

用途は

1.HDMI出力のビデオカメラ、デジタルカメラをZoomなどのオンライミーティング
2.Raspberry Piなどを使う際に専用にモニタを用意しなくても、PCの画面内にHDMI出力が表示できる

といったことかと思います。

早速使ってみますが、残念ながら2020年9月8日現在、LinuxMint 20.3環境では挿しただけでは動作しません。正確には挿しただけで動作するPCと動作しないPCがありました。挿しただけで動作したPCはもともとカメラが内蔵されているノートPCで、「もともとカメラ内蔵」というあたりが鍵だったのではないかと思います。

しかし、動かないPCも原因ははっきりしているので、いずれドライバが修正される・・・と期待します(他力本願)。

以下は、動かないPCでの導入から処置までの手順です。

まず、LinuxMintを起動して、その状態で購入したHDMIキャプチャを挿入します。動作確認用のアプリとして、Synapticパッケージマネージャなどで、guvcviewをインストールしておきます。で、guvcviewを起動してもカメラがない、ということで起動できません。

ここで、dmesgを見てみると、

[ 45.224783] usb 1-1.4: new high-speed USB device number 3 using ehci-pci
[ 45.340503] usb 1-1.4: New USB device found, idVendor=534d, idProduct=2109, bcdDevice=21.00
[ 45.340506] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 45.340508] usb 1-1.4: Product: USB Video
[ 45.340510] usb 1-1.4: Manufacturer: MACROSILICON
[ 45.342299] hid-generic 0003:534D:2109.0007: hiddev1,hidraw6: USB HID v1.10 Device [MACROSILICON USB Video] on usb-0000:00:1a.0-1.4/input4
[ 45.367578] mc: Linux media interface: v0.10
[ 45.376517] videodev: Linux video capture interface: v2.00
[ 45.377384] usbcore: registered new interface driver snd-usb-audio
[ 45.388525] usbcore: registered new interface driver uvcvideo
[ 45.388526] USB Video Class driver (1.1.1)

という感じで、USB Video Classドライバはロードされているっぽいのですが、実際にはguvcviewを起動してみると、ダメです。

そこでググって見つけたのがArchlinuxのフォーラムのこの記事です。

~$ ls -l /sys/bus/usb/drivers/snd-usb-audio/
合計 0
lrwxrwxrwx 1 root root 0 9月 8 21:49 1-1.4:1.0 -> ../../../../devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.4/1-1.4:1.0
lrwxrwxrwx 1 root root 0 9月 8 21:49 1-1.4:1.1 -> ../../../../devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.4/1-1.4:1.1
lrwxrwxrwx 1 root root 0 9月 8 21:49 1-1.4:1.2 -> ../../../../devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.4/1-1.4:1.2
lrwxrwxrwx 1 root root 0 9月 8 21:49 1-1.4:1.3 -> ../../../../devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.4/1-1.4:1.3
--w------- 1 root root 4096 9月 8 21:49 bind
lrwxrwxrwx 1 root root 0 9月 8 21:48 module -> ../../../../module/snd_usb_audio
-rw-r--r-- 1 root root 4096 9月 8 21:49 new_id
-rw-r--r-- 1 root root 4096 9月 8 21:49 remove_id
--w------- 1 root root 4096 9月 8 21:48 uevent
--w------- 1 root root 4096 9月 8 21:49 unbind

どうやら、USBの4つの論理インタフェースがすべてオーディオとして認識してしまう(実際には後半2つのみ)バグがドライバにあるようです。なので、一旦unbindして、bindしなおすというのがとりあえずの回避策になります。

まず、4つの論理インタフェースをunbindします。

~$ echo "1-1.4:1.0" | sudo tee -a /sys/bus/usb/drivers/snd-usb-audio/unbind 
~$ echo "1-1.4:1.1" | sudo tee -a /sys/bus/usb/drivers/snd-usb-audio/unbind 
~$ echo "1-1.4:1.2" | sudo tee -a /sys/bus/usb/drivers/snd-usb-audio/unbind 
~$ echo "1-1.4:1.3" | sudo tee -a /sys/bus/usb/drivers/snd-usb-audio/unbind

次に、bindしなおします。

~$ echo "1-1.4:1.0" | sudo tee -a /sys/bus/usb/drivers/uvcvideo/bind 
~$ echo "1-1.4:1.2" | sudo tee -a /sys/bus/usb/drivers/snd-usb-audio/bind

これで、アプリケーションのサウンドとビデオの中にあるguvcviewを起動すると、

といった感じで動作させることができます。
この画像は入力に別のPCを接続して、スクリーンセーバーのプレビューを起動しています。また、初回起動時は640×480になっていますが、このキャプチャは1360×768に変更後です。

もちろん、動画も問題なく録画できるように見えますし、音声もステレオで録れています。別PC側でスピーカーテストをすると、ちゃんと別チャンネルになっています。しかし・・・、どこでおかしいのかわかりませんが、自分の環境では左右が逆でした・・・orz。

まあ、Raspberry Piなどの画面を表示させる際には関係ないので自分の使い方では問題ないです。これで、わざわざモニタの接続を切り替えることなくRaspberry PiなどのHDMI出力を表示させることができます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)