Howto

UVC対応Webカメラを使用してストリーミング配信をおこなう

UVC(USB Device Class)に対応したWebカメラを使用して、Webブラウザで参照可能なストリーミング配信をする方法を紹介します。UVC対応カメラは、Qcam Orbit AF(Logicool製)を使用します。また、ストリーミングの配信にはMJPG-streamerを使用します。

おおまかな手順は下記のようになります。

  1. Linux kernelのvideo4linux2を有効にする
  2. uvcvideoドライバをクロスコンパイルする
  3. MJPG-streamerをクロスコンパイルする
  4. ファイルの配置とイメージ作成
  5. 実行する

なお、本 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. 関連情報

本Howtoで使用したイメージは以下からダウンロードできます。

本Howtoは、Armadillo-500に適用できます。