警告メッセージ

Howtoは、Armadilloシリーズを有効に活用するための参考資料です。使用ソフトウェアのバージョンなど諸条件の差異によって、記載内容と実際の動作が異なる場合があります。また、すべての機能検証や長期の動作試験を行ったものではありませんので、必ずご使用目的に適合した検証・試験を行ってください。

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

対象製品: Armadillo-500 FXArmadillo-500

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  (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  (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に適用できます。