ブログ

Armadillo-840のAtmark Distにffmpegを入れてみる

at_takuya.sasaki
2015年2月20日 23時05分

Armadillo-840では、AVコーデックミドルウェアによりカメラからの入力画像をH.264にエンコードすることができます。 今回は、USBカメラからの画像をJPEGファイルに連続して保存し、ffmpegで動画ファイルに変換するということを試してみます。 ffmegはDebianパッケージのバイナリを使うことにします。

1. ソースコードをダウンロードする

1.1. ATDE5で、カーネル、ユーザーランドのソースコードをダウンロードします。
atmark@atde5:~$  wget http://armadillo.atmark-techno.com/files/downloads/armadillo-840/source/linux-3.4-at10.tar.gz
atmark@atde5:~$  wget http://armadillo.atmark-techno.com/files/downloads/armadillo-840/source/atmark-dist-20150127.tar.gz
1.2 展開して、シンボリックリンクを張ります
atmark@atde5:~$  tar xvf linux-3.4-at10.tar.gz 
atmark@atde5:~$ tar xvf atmark-dist-20150127.tar.gz 
atmark@atde5:~$ ln -s atmark-dist-20150127 atmark-dist
atmark@atde5:~$ cd atmark-dist
atmark@atde5:~/atmark-dist$ ln -s ../linux-3.4-at10 ./linux-3.x
1.3 make menuconfigした後、ビルドします
atmark@atde5:~/atmark-dist$ make menuconfig
 
Vendor/Product Selection  --->
(X) AtmarkTechno
(X) Armadillo-840
 
atmark@atde5:~/atmark-dist$ make

2. ffmegが依存するパッケージを調べる

以下のHowToを参考に、ffmpegが依存するパッケージを調べます
https://users.atmark-techno.com/blog/53/1007

2.1. apt-rdependsをインストール
atmark@atde5:~/atmark-dist$ sudo apt-get install apt-rdepends
2.2. ffmpegの依存パッケージを調査

以下のクロスパッケージがATDE5には不足しているようです。

libav-tools
libavdevice53
libcdio-cdda1
libcdio-paranoia1
libavfilter2
libtbb2 (armhfパッケージがないので無視)
libsdl1.2debian
2.3. パッケージのダウンロード

Debianパッケージのページからffmpegと上記パッケージのarmhf版をダウンロードします。

atmark@atde5:~/atmark-dist$ cd
atmark@atde5:~$ mkdir pkg
atmark@atde5:~$ cd pkg
atmark@atde5:~/pkg$ wget http://ftp.jp.debian.org/debian/pool/main/liba/libav/ffmpeg_0.8.16-1_armhf.deb
atmark@atde5:~/pkg$ wget http://ftp.jp.debian.org/debian/pool/main/liba/libav/libav-tools_0.8.16-1_armhf.deb
atmark@atde5:~/pkg$ wget http://ftp.jp.debian.org/debian/pool/main/liba/libav/libavdevice53_0.8.16-1_armhf.deb
atmark@atde5:~/pkg$ wget http://ftp.jp.debian.org/debian/pool/main/libc/libcdio/libcdio-cdda1_0.83-4_armhf.deb
atmark@atde5:~/pkg$ wget http://ftp.jp.debian.org/debian/pool/main/libc/libcdio/libcdio-paranoia1_0.83-4_armhf.deb
atmark@atde5:~/pkg$ wget http://ftp.jp.debian.org/debian/pool/main/liba/libav/libavfilter2_0.8.16-1_armhf.deb
atmark@atde5:~/pkg$ wget http://ftp.jp.debian.org/debian/pool/main/libs/libsdl1.2/libsdl1.2debian_1.2.15-5_armhf.deb

今回は 10fpsでカメラからの画像を取り込みますが、フレームレートを上げる場合には、以下のフォーラムで出ている libjpeg-tuboの導入なども検討してもよいかもしれません。

https://users.atmark-techno.com/forum/armadillo/1181

2.4. パッケージをAtmark Distへ展開

今回は、パッケージをAtmark Distのromfsフォルダに直接展開します。

atmark@atde5:~/pkg$ dpkg -x ffmpeg_0.8.16-1_armhf.deb ../atmark-dist/romfs/
atmark@atde5:~/pkg$ dpkg -x libcdio-cdda1_0.83-4_armhf.deb ../atmark-dist/romfs/
atmark@atde5:~/pkg$ dpkg -x libav-tools_0.8.16-1_armhf.deb ../atmark-dist/romfs/
atmark@atde5:~/pkg$ dpkg -x libcdio-paranoia1_0.83-4_armhf.deb ../atmark-dist/romfs/
atmark@atde5:~/pkg$ dpkg -x libavdevice53_0.8.16-1_armhf.deb ../atmark-dist/romfs/
atmark@atde5:~/pkg$ dpkg -x libsdl1.2debian_1.2.15-5_armhf.deb ../atmark-dist/romfs/
atmark@atde5:~/pkg$ dpkg -x libavfilter2_0.8.16-1_armhf.deb ../atmark-dist/romfs/
2.5. 不要なファイルを削除
atmark@atde5:~/pkg$ cd ../atmark-dist/
atmark@atde5:~/atmark-dist$ rm -rf romfs/usr/share/doc/
atmark@atde5:~/atmark-dist$ rm -rf romfs/usr/share/man/

3. 再度イメージ化

再度 make romfs / make imageを実行します。

atmark@atde5:~/atmark-dist$ make romfs
atmark@atde5:~/atmark-dist$ make image

作成された romfs.img.gz をArmadaillo-840に書き込みます。(書き込み方はマニュアルをご確認ください)

4. mjpg-streamerを使ってカメラからの画像をjpegファイルに落とす

4.1 Armadillo-840にUSBカメラを接続した状態で起動します。

/dev/video0 が USBカメラであることを確認しましょう。

[root@armadillo840-0 (ttySC2) ~]# cat /sys/class/video4linux/video0/name
BUFFALO BSWHD06M USB Camera
4.2 mjpg-streamerを起動します。

( Errorが出てますが、無視します)
一定時間経過後に、Ctrl-C で停止します。 ファイルは ramdisk上に作成していますので、あまり長い時間起動するとメモリが枯渇しますので注意してください。
( output_file.so の-sオプションでリングバッファを指定することも可能です。)

[root@armadillo840-0 (ttySC2) ~]# LD_LIBRARY_PATH=/usr/lib/mjpg_streamer/ mjpg_s
treamer -i "input_uvc.so -f 15 -d /dev/video0 -y -r VGA" -o "output_file.so -f /
home/ftp/pub"
MJPG Streamer Version: svn rev:
 i: Using V4L2 device.: /dev/video0
 i: Desired Resolution: 640 x 480
 i: Frames Per Second.: 15
 i: Format............: YUV
 i: JPEG Quality......: 80
Adding control for Pan (relative)
UVCIOC_CTRL_ADD - Error: Inappropriate ioctl for device
Adding control for Tilt (relative)
UVCIOC_CTRL_ADD - Error: Inappropriate ioctl for device
Adding control for Pan Reset
UVCIOC_CTRL_ADD - Error: Inappropriate ioctl for device
Adding control for Tilt Reset
UVCIOC_CTRL_ADD - Error: Inappropriate ioctl for device
Adding control for Pan/tilt Reset
UVCIOC_CTRL_ADD - Error: Inappropriate ioctl for device
Adding control for Focus (absolute)
UVCIOC_CTRL_ADD - Error: Inappropriate ioctl for device
mapping control for Pan (relative)
UVCIOC_CTRL_MAP - Error: Inappropriate ioctl for device
mapping control for Tilt (relative)
UVCIOC_CTRL_MAP - Error: Inappropriate ioctl for device
mapping control for Pan Reset
UVCIOC_CTRL_MAP - Error: Inappropriate ioctl for device
mapping control for Tilt Reset
UVCIOC_CTRL_MAP - Error: Inappropriate ioctl for device
mapping control for Pan/tilt Reset
UVCIOC_CTRL_MAP - Error: Inappropriate ioctl for device
mapping control for Focus (absolute)
UVCIOC_CTRL_MAP - Error: Inappropriate ioctl for device
mapping control for LED1 Mode
UVCIOC_CTRL_MAP - Error: Inappropriate ioctl for device
mapping control for LED1 Frequency
UVCIOC_CTRL_MAP - Error: Inappropriate ioctl for device
mapping control for Disable video processing
UVCIOC_CTRL_MAP - Error: Inappropriate ioctl for device
mapping control for Raw bits per pixel
UVCIOC_CTRL_MAP - Error: Inappropriate ioctl for device
 o: output folder.....: /home/ftp/pub
 o: input plugin.....: 0: input_uvc.so
 o: delay after save..: 0
 o: ringbuffer size...: no ringbuffer
 o: command...........: disabled
4.3 /home/ftp/pub にjpegファイルができているはずです。
[root@armadillo840-0 (ttySC2) ~]# ls  /home/ftp/pub/
4.4. jpegファイルのプレフィックスを削除します
[root@armadillo840-0 (ttySC2) ~]# cd /home/ftp/pub/
[root@armadillo840-0 (ttySC2) /home/ftp/pub]# for f in *_picture_*.jpg; do mv $f ${f#*_picture_}; done

5. ffmpegでjpegファイルからaviファイルに変換する

5.1 jpeg→avi変換
[root@armadillo840-0 (ttySC2) /home/ftp/pub]# ffmpeg -y -r 10 -i "/home/ftp/pub/%09d.jpg" -vcodec mjpeg -sameq /home/ftp/pub/out.avi
5.2 /home/ftp/pub/out.avi ができているはずです。 PCなどで再生してみてください。
[root@armadillo840-0 (ttySC2) /home/ftp/pub]# ls -la /home/ftp/pub/out.avi
-rw-r--r--    1 root     root       3705866 Jan  1 15:23 /home/ftp/pub/out.avi