webcamstudio本家では永らく更新が止まっており、メンテナンスだけになってしまっているプロジェクトだそうで。
Linuxでは未だに仮想カメラとしてのこなれているソフトは少ないので修正して動くようにしてみました。
環境:Ubuntu Linux 12.04.2LTS
Kernel 3.7.9
これで動くようにしてみます。
http://code.google.com/p/webcamstudio/ にてまだ入手することができます。
先ずはwebcamstudio_0.57beta4_all.debを入手してきます。
$ sudo dpkg -i webcamstudio_0.57beta4_all.deb
当然の事ながらそのままではカーネル3.7.9には対応していないのでインストールが完了しません。
そこで、次のパッチを適用します:
–diff_webcamstudio.patch–
--- webcamstudio.c.orig 2013-02-19 07:55:42.593627911 +0900
+++ webcamstudio.c 2013-02-20 05:47:54.094668804 +0900
@@ -1435,7 +1435,9 @@ init_buffers (struct webcamstudio
b->length = buffer_size;
b->field = V4L2_FIELD_NONE;
b->flags = 0;
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,6,1)
b->input = 0;
+#endif
b->m.offset = i * buffer_size;
b->memory = V4L2_MEMORY_MMAP;
b->sequence = 0;
@@ -1464,6 +1466,11 @@ init_vdev (struct video_device
vdev->minor = -1;
if (debug > 1)
vdev->debug = V4L2_DEBUG_IOCTL | V4L2_DEBUG_IOCTL_ARG;
+#ifdef VFL_DIR_M2M
+ vdev->vfl_dir = VFL_DIR_M2M;
+#endif
+
MARK();
}
これにより、構造体からinputメンバが削られた影響を回避することができます。
(このあたりはv4l2loopbackの新しいカーネルへの対応の実装を参考にしています)
もうひとつ、Ubuntu 12.04.2LTSではjava6の提供がなくなっているのでこちらも対応が必要です。
そこで、次のパッチを適用します:
–diff_webcamstudio_shexec_modify.patch–
--- webcamstudio.orig 2012-06-20 22:31:10.117328614 +0900
+++ webcamstudio_patched 2012-06-20 22:45:07.207331138 +0900
@@ -3,10 +3,27 @@
# Patrick Balleux 2009
# Version 0.57beta4
INSTALLDIR=/usr/lib/webcamstudio
-JAVA_DIR=/usr/lib/jvm/java-6-openjdk/bin
-if [ -f $JAVA_DIR/java ]
+ARCH=$(uname -i)
+case $ARCH in
+ x86_64)
+ UNAME=-amd64
+ ;;
+ i386)
+ #UNAME=
+ ;;
+esac
+JAVA_DIR=/usr/lib/jvm/java-6-openjdk$UNAME/bin
+OPENJDK7_DIR=/usr/lib/jvm/java-7-openjdk$UNAME/bin
+ORACLE_JAVA_DIR=/usr/lib/jvm/java-7-oracle/bin
+if [ -f $OPENJDK7_DIR/java ]
then
- JAVA_DIR=/usr/lib/jvm/java-6-openjdk/bin
+ JAVA_DIR=/usr/lib/jvm/java-7-openjdk$UNAME/bin
+elif [ -f $JAVA_DIR/java ]
+then
+ JAVA_DIR=/usr/lib/jvm/java-6-openjdk$UNAME/bin
+elif [ -f $ORACLE_JAVA_DIR/java ]
+then
+ JAVA_DIR=/usr/lib/jvm/java-7-oracle/bin
else
JAVA_DIR=/usr/lib/jvm/java-6-sun/bin
fi
ここで、
$ sudo patch `which webcamstudio` < diff_webcamstudio_shexec_modify.patch
とします。続いて、
$ sudo patch /usr/share/webcamstudio/webcastudio-src/webcastudio.c < diff_webcamstudio.patch
とします。これによりwebcamstudio側の準備ができました。
$ sudo make install
とすると、webcamstudio.koが生成されます。
$ sudo insmod webcamstudio.ko
とした時に、何もエラーもなくdmesgが次のようであれば終了です。
$ dmesg
...
[ ... ] v4l2loopack driver version 1.0.2 loaded
--webcamstudio--
もしも次のエラーがあった場合は次のステップへ。
$ sudo insmod webcamstudio.ko
insmod: error inserting 'webcamstudio.ko': -1 Unknown symbol in module
$ dmesg
[ ... ] webcamstudio: Unknown symbol video_ioctl2 (err 0)
[ ... ] webcamstudio: Unknown symbol video_devdata (err 0)
[ ... ] webcamstudio: Unknown symbol video_unregister_device (err 0)
[ ... ] webcamstudio: Unknown symbol video_device_alloc (err 0)
[ ... ] webcamstudio: Unknown symbol __video_register_device (err 0)
[ ... ] webcamstudio: Unknown symbol video_device_release (err 0)
カーネルモジュールのvideodev.koが読み込まれていないようです。
カーネル3.6.11からV4Lの階層が変わっているらしく、もしかするとvideodev.koがコンパイルされていないかもしれません。
$ cd <path-to-Kernelsource tree>/linux-3.7/
$ make xconfig
http://nlug.ml1.co.uk/2013/01/gentoo-kernel-3-6-11-webcams-v4l-uvc-video-kernel-config-change/3798 によると、
まず、V4Lを3.7で有効に扱うためには、
MEDIA_CAMERA_SUPPORTをyにする必要があります。
Location:
-> Device Drivers
-> Multimedia support (MEDIA_SUPPORT [=m])
これにより、CONFIG_VIDEO_V4L2_SUBDEV_APIをyにできるようになります。
Depends on: MEDIA_SUPPORT [=m] && VIDEO_DEV [=m] && MEDIA_CONTROLLER [=y] && EXPERIMENTAL [=y]
なので、このカーネルコンフィグではvideodev.koがmakeされるようになります。
参考画像:

このカーネルコンフィグのカーネルを用いれば、/usr/share/webcamstudio/webcamstudio-src/にて
$ sudo make install
をすると
[sudo] password for <user>:
make -C /lib/modules/`uname -r`/build M=/usr/share/webcamstudio/webcamstudio-src modules_install
make[1]: ディレクトリ `/usr/src/linux-headers-3.7.9-custom-fornewercore2' に入ります
INSTALL /usr/share/webcamstudio/webcamstudio-src/webcamstudio.ko
DEPMOD 3.7.9-custom-fornewercore2
make[1]: ディレクトリ `/usr/src/linux-headers-3.7.9-custom-fornewercore2' から出ます
depmod -ae
WARNING: -e needs -E or -F
$ dmesg
...
[ ... ] v4l2loopack driver version 1.0.2 loaded
となり、ちゃんとロードされます。まさかカーネルコンフィグの仕業でwebcamstudioカーネルモジュールが読み込めなくなっているとは思わなかった。。。
ちゃんと起動できている。
$ webcamstudio
Using JRE: /usr/lib/jvm/java-7-openjdk-amd64/bin
OS is Linux
DEBUG: WebcamStudio video device (video0)
DEBUG: WebcamStudio video device (video0)
Starting iWebcamera Detection...
NetworkStream available on port 4888
You can use FFMPEG to connect to this stream...
ffmpeg -f ogg -i tcp://127.0.0.1:4888 test.ogg
どうやら動いているようだ。
