FreeBSD Daily Topics

2010年1月25日≪注目≫Video4BSD登場 - Video4Linux Webカメラ対応

heads-up

Webcam for FreeBSD, Video4BSD and Video4Linux

current - 2010年1月10日(協定世界時)に9-CURRENTに対して実施されたコミット(r202025)および2010年1月16日(協定世界時)にPorts Collectionに追加された一連のアプリケーションによって、FreeBSDアプリケーションからVideo4Linuxを使ったアプリケーションが動作するようになりました。

表1 Webカメラ関連Ports
port内容
multimedia/video4bsd-kmod/dev/videoNおよび/dev/video_daemonNデバイスを提供するカーネルモジュール
multimedia/webcamdWebカメラデバイスドライバ集。ユーザランドでデーモンとして動作し、/dev/video_daemonNおよびlibusbと連系してWebカメラからデータのやりとりを実現する
multimedia/pwcviewWebカメラデビューア
multimedia/v4l_compatVideo4Linuxを利用するためのラッパライブラリ
multimedia/libv4lVideo4Linuxヘッダファイル

video4bsdカーネルモジュールを読み込むと/dev/videoNと/dev/video_daemonNというデバイスファイルが生成されます。/dev/videoNへのアクセス(mmap、read、write、open、close)は/dev/video_daemonNへ転送されます。

/dev/video_daemonNはwebcamd(8)に利用されるデバイスファイルです。webcamd(8)はWebカメラのデバイスドライバおよびlibusbを使ったデバイスとのやりとりを実施します。つまり、/dev/video_daemonNへ渡ってきた処理はwebcamd(8)で処理され、その結果が/dev/video_daemonN→/dev/videoNを経て、Video4Linuxを利用しているアプリケーションへ戻っていく仕組みになっています。今のところサポートされていないのはpoll処理です。大雑把に処理の流れをたどると次のようになります。

  1. Video4Linux対応のアプリケーション
  2. /dev/videoN
  3. /dev/video_daemonN
  4. webcamd(8)
  5. libusb
  6. Webカメラ
  7. libusb
  8. webcamd(8)
  9. /dev/video_daemonN
  10. /dev/videoN
  11. Video4Linux対応のアプリケーション

Video4Linuxに対応したカーネルモジュールとデバイスドライバとしてはすでにpwc(4)(multimedia/pwcbsd)がありますが、対応しているデバイスドライバの数に限りがあり、最近のデバイスは対応していないという状況になります。これと比べて今回新しく追加されたwebcamd (multimedia/webcamd)は対応しているデバイスが多く、より多くのWebカメラが利用できます。

この機能を試すには、まず次の条件をみたすFreeBSDが必要です。

表2 Video4FreeBSD / Video4Linuxに対応したFreeBSD
2010年1月10日 (r202025) 以降のFreeBSD 9-CURRENT
2010年1月17日 (r202504) 以降のFreeBSD 8-STABLE

2010年1月16日21時(協定世界時)以降のPorts Collectionから次のアプリケーションやライブラリ、カーネルモジュールをインストールします。

  • multimedia/video4bsd-kmod
  • multimedia/webcamd
  • multimedia/pwcview
  • multimedia/v4l_compat
  • multimedia/libv4l

システム起動時にVideo4BSDカーネルモジュールを読み込ませるため、/boot/loader.confまたは/boot/loader.conf.localファイルに次の設定を追加します。

リスト /boot/loader.confまたは/boot/loader.conf.localファイルに追加する設定
video4bsd_load="YES"

/dev/videoNおよび/dev/video_daemonNデバイスファイルにアクセスできるように、/etc/devfs.rulesファイルに次の設定を追加します。ルールセットの部分([localrules=10])は使っているものへ適宜変更してください。なにも設定していなければこの設定を追加します。

なお、この設定では、Webカメラを利用するユーザはoperatorグループに所属している必要があります。それ以外のユーザでも利用できるようにする場合には、パーミッションを「0666」に変更するなど必要に応じて変更します。

リスト /etc/devfs.rulesファイルに追加するパーミッション設定の例
[localrules=10]
# Webcam
add path 'video*' mode 0660 group operator

/etc/devfs.rulesファイルのルールを適用し、さらにwebcamd(8)が起動できるように次の設定を/etc/rc.confまたは/etc/rc.conf.localファイルに追加します。ルールセットの部分([localrules=10])は使っているものへ適宜変更してください。何も設定していなければこの設定を追加します。

リスト /etc/devfs.rulesファイルのルールを適用し、さらにwebcamd(8)が起動できるように/etc/rc.confまたは/etc/rc.conf.localに追加する設定
devfs_system_ruleset="localrules"
webcamd_enable="YES"

ここで一旦システムを再起動するか、次のようにして手動でカーネルモジュールの読み込みと、devd(8)デーモンの再起動を実施します。

手動でVideo4BSDカーネルモジュールを読み込みdevd(8)を再起動する方法
# kldload video4bsd
# service devd restart

Webカメラを差し込むと自動的にwebcamd(8)デーモンが起動するようになります。自動的に起動してこない場合には、次のように手動で起動します。この例では/dev/ugen7.2にWebカメラがささっていることになります。ugenは実際にWebカメラがささっているものを指定してください。

「tail -f /var/log/messages」のようにログファイルを監視しながらWebカメラの挿抜を実施すれば、どのugenファイルが使われているか確認できます。

webcamd(8)を手動で起動する方法
# service webcamd start ugen7.2

Webカメラが差し込まれた段階での動作は/usr/local/etc/devd/webcamd.confファイルに記述されています。このファイルを編集すればUnknownデバイスとして認識されるWebカメラでも自動的にwebcamd(8)を起動できるようになります。ここでpwcview(1)を起動すると、Webカメラの撮影している内容が画面に表示されるようになります。

pwcview(1)を起動
% pwcview
 pwcview(1)の実行例 - Webカメラでディスプレイを撮影
図 pwcview(1)の実行例 - Webカメラでディスプレイを撮影
 pwcview(1)の実行例 - Webカメラでディスプレイを撮影
図 pwcview(1)の実行例 - Webカメラでディスプレイを撮影
 pwcview(1)の実行例 - Webカメラで机を撮影
図 pwcview(1)の実行例 - Webカメラで机を撮影

Video4Linuxに対応したアプリケーションは再度ビルドすることで、FreeBSD Video4BSDの機能を利用できるようになります。たとえばVLCを再構築するとVideo4BSD経由でWebカメラの映像を補足できるようになります。

 vlc(1)の実行例 - Webカメラでディスプレイを撮影
図 vlc(1)の実行例 - Webカメラでディスプレイを撮影

CheeseでWebカメラを使うには、Gstreamerの若干の調整と再構築が必要です。current-mlに報告された内容によれば、今回追加された機能はVideo4Linuxを利用するすべてのアプリケーションで利用できるようになるとされています。なお、LinuxバイナリであるSkypeからは利用を確認できませんでした。

おすすめ記事

記事・ニュース一覧