UVC(USB Device Class)に対応したWebカメラを使用して、Webブラウザで参照可能なストリーミング配信をする方法を紹介します。UVC対応カメラは、Qcam Orbit AF(Logicool製)を使用します。また、ストリーミングの配信にはMJPG-streamerを使用します。
おおまかな手順は下記のようになります。
- Linux kernelのvideo4linux2を有効にする
- uvcvideoドライバをクロスコンパイルする
- MJPG-streamerをクロスコンパイルする
- ファイルの配置とイメージ作成
- 実行する
なお、本 Howto では、以下の環境を想定しています。ご利用の環境に合わせて適宜読みかえてください。
- 対象製品:Armadillo-500
- atmark-dist:v20081018
- linux-kernel:v2.6.18-at8
- UVC対応Webカメラ:Qcam Orbit AF(Logicool製)
- uvcvideoデバイスドライバ:リビジョン262(2008年10月29日現在の最新svnリポジトリ)
- MJPG-streamer:リビジョン69(2008年10月29日現在の最新svnリポジトリ)
- 開発PC:Debian etch
1. Linux kernelのvideo4linux2を有効にする
make menuconfig を使用した場合の設定は下記のようになります。
[PC ~/atmark-dist]$ make menuconfig
Main Menu では、下記のように設定してください。
Main Menu
Vendor/Product Selection --->
--- Select the Vendor you wish to target
(AtmarkTechno) Vendor
--- Select the Product you wish to target
(Armadillo-500) AtmarkTechno Products
Kernel/Library/Defaults Selection --->
--- Kernel is linux-2.6.x
(default) Cross-dev
(None) Libc Version
[*] Customize Kernel Settings (NEW)
[ ] Customize Vendor/User Settings (NEW)
次に、カーネルの設定をおこないます。
Linux Kernel Configuration
Device Drivers --->
Multimedia devices --->
<*> Video For Linux <-チェックをいれます
Video Capture Adapters --->
< > MXC Video For Linux Camera <-チェックを外します
< > MXC Video For Linux Video Output <-チェックを外します
以上の設定をおこない、makeしてください。
2. uvcvideoドライバをクロスコンパイルする
まずは、ソースコードを取得します。
[PC ~]$ svn checkout svn://svn.berlios.de/linux-uvc/linux-uvc/trunk linux-uvc
[PC ~]$ ls
atmark-dist linux-uvc
以下のようなクロスコンパイル用のMakefileを作成し、linux-uvcディレクトリの下にMakefile.crossという名前で保存します。
KSRCには、カーネルソースディレクトリを指定します。
ifneq ($(KERNELRELEASE),)
obj-m := uvcvideo.o
uvcvideo-objs := uvc_driver.o uvc_queue.o uvc_v4l2.o uvc_video.o uvc_ctrl.o uvc_status.o uvc_isight.o
else
PWD := $(shell pwd)
KSRC := ../atmark-dist/linux-2.6.x
MAKEARCH = $(MAKE) ARCH=arm CROSS_COMPILE=arm-linux-gnu-
all: uvcvideo
uvcvideo:
sh svn-version.sh > version.h 2>/dev/null
$(MAKEARCH) -C $(KSRC) M=$(PWD) modules
endif
clean:
rm -f *.[oas] .*.flags *.ko .*.cmd .*.d .*.tmp *.mod.c
rm -rf .tmp_versions
クロスコンパイルします。
[PC ~]$ cd linux-uvc
[PC ~/linux-uvc]$ make -f Makefile.cross
[PC ~/linux-uvc]$ ls *.ko
uvcvideo.ko
3. MJPG-streamerをクロスコンパイルする
まずは、ソースコードを取得します。
[PC ~]$ svn checkout -r 69 https://mjpg-streamer.svn.sourceforge.net/svnroot/mjpg-streamer mjpg-streamer
[PC ~]$ ls
atmark-dist linux-uvc mjpg-streamer
クロスコンパイルします。
[PC ~]$ cd mjpg-streamer/mjpg-streamer
[PC ~/mjpg-streamer/mjpg-streamer]$ make CC=arm-linux-gnu-gcc
[PC ~/mjpg-streamer/mjpg-streamer]$ ls mjpg_streamer *.so
input_gspcav1.so input_testpicture.so input_uvc.so mjpg_streamer output_autofocus.so output_file.so output_http.so
MJPG_streamerのコンパイルには、libjpeg62ライブラリが必要です。もし、「jpeglib.h」が見つからないというエラーになる場合は、以下のようにしてクロスコンパイル用のライブラリをインストールしてください。
[PC ~]$ wget http://ftp.jp.debian.org/debian/pool/main/libj/libjpeg6b/libjpeg62_6b-13_arm.deb
[PC ~]$ wget http://ftp.jp.debian.org/debian/pool/main/libj/libjpeg6b/libjpeg62-dev_6b-13_arm.deb
[PC ~]$ dpkg-cross -b -aarm libjpeg62_6b-13_arm.deb
[PC ~]$ dpkg-cross -b -aarm libjpeg62-dev_6b-13_arm.deb
[PC ~]$ sudo dpkg -i libjpeg62-arm-cross_6b-13_all.deb
[PC ~]$ sudo dpkg -i libjpeg62-dev-arm-cross_6b-13_all.deb
4. ファイルの配置とイメージ作成
手順2.及び3.で作成したファイルをArmadillo-500のユーザランドに以下のように配置します。
ファイル | 配置したいディレクトリ名 |
---|---|
uvcvideo.ko | /usr/lib/ |
MJPG-streamerで使用する共有ファイル | /usr/lib/ |
MJPEG-streamerの実行ファイル | /usr/bin/ |
MJPEG-streamdeのwwwファイル | /home/www-data/ |
実際の作業としては、Atmark Dist内にファイルをコピーします。
以下のように、配置したいディレクトリの前に
atmark-dist/vendors/AtmarkTechno/Armadillo-500/
を付けてください。
[PC ~]$ ls
atmark-dist linux-uvc mjpg-streamer
[PC ~]$ mkdir atmark-dist/vendors/AtmarkTechno/Armadillo-500/usr/lib
[PC ~]$ cp linux-uvc/uvcvideo.ko atmark-dist/vendors/AtmarkTechno/Armadillo-500/usr/lib/
[PC ~]$ cp mjpg-streamer/mjpg-streamer/*.so atmark-dist/vendors/AtmarkTechno/Armadillo-500/usr/lib/
[PC ~]$ cp mjpg-streamer/mjpg-streamer/mjpg-streamer atmark-dist/vendors/AtmarkTechno/Armadillo-500/usr/bin/
[PC ~]$ cp -r mjpg-streamer/mjpg-streamer/www atmark-dist/vendors/AtmarkTechno/Armadillo-500/home/www-data/
イメージを作成します。
[PC ~]$ ls
atmark-dist linux-uvc mjpg-streamer
[PC ~]$ cd atmark-dist
[PC ~]$ make romfs image
atmark-dist/imagesディレクトリに作成された、linux.bin.gzとromfs.img.gzをArmadilloに書き込んでください。
5. 実行する
まず、uvcvideo.koをカーネルに組み込みます。
[armadillo ~]# insmod /usr/lib/uvcvideo.ko
Using /usr/lib/uvcvideo.ko
uvcvideo: Found UVC 1.00 device <unnamed> (046d:0994)
uvcvideo: UVC non compliance - GET_DEF(PROBE) not supported. Enabling workaround.
input: UVC Camera (046d:0994) as /class/input/input2
usbcore: registered new driver uvcvideo
USB Video Class driver (SVN r262)
次に、Qcam Orbit AFをUSBポートに接続します。Qcam Orbit AFは、USBポートがHi-Speedでなければ動作しません。Armadillo-500 開発ベースボードでは、デフォルトでCON3の上段がHi-Sppedで動作するようになっています。この設定を変更するには、USBポートの Hi-Speed / Full-Speed 切り替え方法を参照してください。接続時には以下のようなログが表示されます。
usb 1-1: new high speed USB device using fsl-ehci and address 2
usb 1-1: configuration #1 chosen from 1 choice
uvcvideo: Found UVC 1.00 device <unnamed> (046d:0994)
uvcvideo: UVC non compliance - GET_DEF(PROBE) not supported. Enabling workaround.
input: UVC Camera (046d:0994) as /class/input/input2
最後に、以下のコマンドでMJPG-streamerを起動します。
[armadillo ~]# mjpg_streamer --input "input_uvc.so --device /dev/video0 --fps 5 --resolution 640x480" --output "output_http.so --port 8080 --www /home/www-data/www"
MJPG Streamer Version.: 2.0
i: Using V4L2 device.: /dev/video0
i: Desired Resolution: 640 x 480
i: Frames Per Second.: 5
i: Format............: MJPEG
o: www-folder-path...: /home/www-data/www/
o: HTTP TCP port.....: 8080
o: username:password.: disabled
o: commands..........: enabled
Webブラウザで、「http://(Armadillo-500のIPアドレス):8080/」にアクセスすると、MJPG-Streamer Demo Pagesが表示されます。静止画、動画、およびPan/Tilt/LEDのOn/Off等の制御をすることができます。 (Internet Exploler 6及び7では、MJPEGによるストリーム(動画)を閲覧することができません。しかし、Javascriptを使用したストリーム(動画)は、Internet Explorerでも閲覧することができます。)
スクリーンショットは下記のようになります。
6. 関連情報
- Linux UVC driver and tools UVC対応Webカメラ一覧が掲載されています
- MJPG-streamer
- Logitech webcams Logitech製Webカメラのドライバ情報が掲載されています
- Armadillo-9でのWebカメラ動作情報
本Howtoで使用したイメージは以下からダウンロードできます。
本Howtoは、Armadillo-500に適用できます。