ひょんなことから*BSD/UNIX/Linux+フリーソフトウェア+USBカメラでLAN内ビデオ通話ができるのか確認してみようと思うに至ったNetBSD編がこのページ。
検証に使用したPCは、デュアルコアCPU 1.80GHz/RAM2GBのデスクトップパソコンPavilionとシングルコアCPU 1.60GHz/RAM2GBのノートPC dynabook、OSは共にNetBSD 7.0.2、RTC/Real Time CommunicationソフトウェアはGNOMEプロジェクト発のEkiga Softphone(イカイガ ソフトフォン) 3.2.6nb52、USBカメラはLogicool C270とElecom UCAM-C0220F(UCAM-C0220FE?)シリーズの2点。
とは言え、事前に調べた限り、何れのカメラもNetBSDで使用できるか否かの情報はありませんでしたが、GSoC - USB Video Class (UVC) webcam driverという話が実現しているのであれば、何れもUVC対応カメラなので期待が持てそう。
まずは、Ekigaをインストール。
NetBSDにEkigaのバイナリがあるとは、ちょっと意外でした。
やはり、NetBSDでも標準でUVC対応しているのか、UCAM-C0220FEもC270もUSBポートに挿しただけでdmesg、usbdevs共に、また、Ekigaを起動、何れのカメラもデバイス設定欄の選択肢にも表示されました。
UCAM-0220FEは、[...UCAM-C02(GStreamer/V4L2)](実際はスラッシュ以降見えないが、たぶんV4L2?)を選択するだけで他に何も設定しなくても映像も出力・表示された一方、C270も[Logitech product 0x0825, rev 2.(GStreamer/V4L2)]を選択することはできますが、リアルタイム映像は表示されません。([映像のテスト(GStreamer/映像のテスト)]、[Goom(GStreamer/Crazy)]、[Moving Logo]は表示され、映像テストのローカル映像部は、いわゆる砂嵐。)
ただ、何れのカメラも[...(PTLIB/V4L2)]を選択すると映像表示以前にクラッシュします。(ptlib-2.10.7nb10、libv4l-0.4.3nb3、gst-plugins0.10-v4l2-0.10、gst-plugins1-v4l2-1.10.0はインストール済みというか入っていた)
ちなみに、とあるPCでは、端末から起動させると、こんなエラーが出てUCAM-C0220FEでも選択するとクラッシュしました。
が、確認するとライブラリが新しすぎることに起因していた為、これを元に存在しないと言われるバージョンのファイルとしてシンボリックリンクを張ることでエラーを回避でき、UCAM-C0220FEを利用できるようになりました。
UCAM-C0220FEについては、NetBSD+Cheeseでも映像表示され、機能することを確認できました。
ものすごく惜しい気がしますが、なぜ、C270はEkigaやCheeseのデバイスリストに選択肢まであるのに認識されないんだろう。。。(と思ったら後述の通り、UCAM-C0220FEだけでなく、C270もMPlayerやmpvなどソフトウェアによってはNetBSD上でも映像表示できることがわかりました。)
(USBカメラ自体についてや画質や音質については冒頭のリンク先参照。)
そこで他にNetBSDで映像確認できるものはないかと探した結果、mpv、MPlayerなどがあり、Arch Wiki ウェブカメラ設定の通り、CLI操作を試すとデュアルコアマシンに限らず、シングルコアマシンでもNetBSD+mpv 3.2.2、MPlayer 1.3.0-4.8.4においては、UCAM-C0220FEもC270も認識、映像も表示されました。
そうなるとCheeseとEkigaなどソフトウェアの問題っぽいですが、負荷が高いのか?同じシングルコアマシンで何れのカメラもCheese、MPlayer、Guvcview、VLCなどでは映像表示でき、Jitsiではビデオ通話できた一方、やはり、Ekigaが若干微妙だったDebianの結果も考え合わせるとCheeseよりも更にEkigaの方が負荷が高いように思えますが、実際のところ原因は不明。
MPlayerとmpvは、UCAM、C270共に被写体が動いても滑らかながらも少し映像が遅延気味でずっと眺めていると酔いそうかも。。。
尚、MPlayerはフォアグラウンドで実行しないとビューワ起動に至りませんでしたが、mpvはフォアグランドでもバックグランドでもOK。
/dev/video0や/dev/video1などの割り当てられたデバイスについては、dmesgで確認。(Linuxだとdmesgでは確認できず、USBポートに挿した時に動的に生成されるため、ls /dev/video*で確認できる一方、NetBSDではdmesgで確認できる一方、デバイスが固定で用意されている為、ls /dev/video*等ではどれなのか判断できない。)
UCAM-0220FE+NetBSD+Ekigaにおいて改めてマシンを起動、UCAMをUSBポートに挿し、Ekigaデバイス設定の選択肢を見ると、いつの間にか、[...UCAM-C02(GStreamer/V4L2)]がなくなっていました。
気づけば、なんのことはない、Ekigaを先に起動すると表示されなかった[...UCAM-C02(GStreamer/V4L2)]が、予めUSBカメラをUSBポートに挿してからEkigaを起動してみたところ、自動認識され、設定パネルを見ると[...UCAM-C02(GStreamer/V4L2)]になっていました。。。ってこれじゃ一応機能する[デバイスを検出する]ボタンの立場がないが。。。
ちなみにNetBSDでEkigaをSIPアカウントで使う場合、ネットワーク検出用にavahidaemonの起動(なければ/etc/rc.dへのコピーと/etc/rc.confにavahidaemon=yes行追加)の他、たぶん、ユーザーにavahiグループを追加しておくのがよいかも。
ただし、Ekiga 3.2.6nb52には、どうも通話音声が一音一音途切れたり、チャットでメッセージ受信への返信はできてもメッセージ送信すると通信できなかったりと、ちょっとしたバグがあるようです。