该系统主要分两部分,一部分是usb摄像头捕捉到移动图像,系统发出声音报警提示,并将采集到的图像/视频保存在指定路径(tiny6410中web服务器指定的位置);另一部分是在局域网/公网环境(我这里采用局域网)下,tiny6410开发板与pc端/智能终端建立网络连接,通过pc端/智能终端访问之前采集的图片/视频。
一.系统构成
该系统硬件由usb摄像头,tiny6410开发板,无线网卡,sd卡硬件构成,软件由嵌入式web服务器(appweb),监控主程序,usb摄像头捕获视频所需库文件和报警子系统-音频播放器主程序 及播放器所需库文件构成。
下面罗列所需的源文件:
1.motion-3.2.12.tar.gz(监控主程序)
2. ffmpeg-0.5.1.tar.gz (usb摄像头捕获视频所需库文件)
3.madplay-0.15.2b.tar.gz( 音频播放器主程序) 4.libid3tag-0.15.1b.tar.gz-libmad-0.15.1b.tar.gz-zlib-1.1.4.tar.gz(播放器所需库文件)。
5.appweb-3.3.2.tar.gz(嵌入式web服务器)
以上源文件可以在http://download.youkuaiyun.com/my 下载。
二.该系统结构组成
1. 声音报警子系统
1.1声卡驱动的开发
1.2 嵌入式播放器移植
2. 摄像头子系统开发
2.1 摄像头驱动开发
2.2 V4L2图像的编程接口学习
3.1移动图像监控主系统的移植
4. 嵌入式服务器的开发
4.1 嵌入式服务器的移植
三. 各源文件的编译步骤
在pc端的linux系统中建立自己的工程文件/home/Motion,分别将上述的源文件压缩包拷贝到工程文件下,并解压在该目录下。在该目录下创建一个目标文件target-arm用于保存下面编译的库文件及二进制可执行文件。可以在http://blog.youkuaiyun.com/qq_28693567/article/details/51235723 下载target-arm 包
1.首先讲解ffmpeg的编译方法,因为在编译motion时需要ffmpeg的库文件
1)解压 tar xvzf ffmpeg-0.5.1.tar.gz
2)配置 ./configuer --prefix=${PWD}/_install(源文件没有该安装文件,需手动建立一个安装目录) --arch=arm --cross-prefix=arm-linux- --enable-shared
3)make
4)make install 安装完成会在_install生我们所需要的库文件lib
2.编译motion
1)tar xvzf motion-3.3.12.tar.gz
2)配置 ./configuer --prefix=${PWD}/_install(源文件没有该安装文件,需手动建立一个安装目录) --host=arm-linux --with-ffmpeg= /home/Motion/ffmpeg-0.5.1/_install --without-mysql --without-pgsql --enable-shared
3)make
4)make install 安装完成会在_install生成我们所需要的文件
3.madplay编译
在编译madplay之前,需要对它运行所需的库文件进行编译:
(1)编译zlib
1)tar xvzf zlib-1.1.4.tar.gz
2)cd zlib-1.1.4
3)设置编译器的环境变量
export CC=arm-linux-gcc
export AR=arm-linux-ar
export RANLIB=arm-linux-ranlib
或者手动修改Makefile文件中的工具链将CC,AR,RANLIB 将gcc改为arm-linux-gcc
4)./configure --prefix=${PWD}/_install(源文件没有该安装文件,需手动建立一个安装目录)
5)make
6)make install
7)以上编译的是静态库文件,我们这里需要动态库文件,故重新配置编译
8)make distclean
9)./configure --prefix=${PWD}/_install(源文件没有该安装文件,需手动建立一个安装目录) --shared
10)手动修改Makefile文件中的工具链将CC,AR,RANLIB LDSHARED将gcc改为arm-linux-gcc
11)make
12)make install
(2)编译libid3tag
1)tar xvzf libid3tag-0.15.1b.tar.gz
2)cd libid3tag-0.15.1b
3)./configure --host=arm-linux --prefix=${PWD}/_install(源文件没有该安装文件,需手动建立一个安装目录)
4)make
5)make install
(3)编译libmad
1)./configure --host=arm-linux --prefix=${PWD}/_install(源文件没有该安装文件,需手动建立一个安装目录)
2)make
在make的时候会出现一个错误,cc1:error:unrecognized command line option “-fforce-mem” 打开makefile文件找到-fforce-mem将其删掉,编译通过。
3)make install
(4)编译madplay
1)tar xvzf madplay-0.15.2b.tar.gz
2)cd madplay-0.15.2b
3)./configure --host=arm-linux --prefix=${PWD}/_install(源文件没有该安装文件,需手动建立一个安装目录)
4)make
5)make install
(4)有关嵌入式web服务器这里就不再赘述,可以参考我博客里的appweb移植 http://blog.youkuaiyun.com/qq_28693567/article/details/51235723
四.在tiny6410上测试编译好的二进制可执行文件。
1.测试嵌入式播放器的功能
Madplay正常运行需要声卡驱动,tiny6410上的声卡驱动(snd-soc-tiny-wm8960.ko和snd-soc-ac97.ko),tiny6410系统启动时已经加载了声卡驱动,故这里不再需要手动的安装声卡驱动,若你的arm开发板系统未编译声卡驱动,则需要手动安装声卡驱动,使用insmod安装。
(1)将libid3tag-0.15.1b,libmad-0.15.1b,zlib-1.1.4 中_install文件下的lib文件夹中的所有库文件拷贝到tiny6410开发板的/lib/目录下,将motion-3.3.12中_install/bin/madplay 拷贝到tiny6410开发板的/local/sbin/目录下
(2)在tiny6410上运行madpaly,提示:不能打开madpaly,原因缺少madplay运行所需要的动态连接库,为了证实这一想法,在pc端linux系统里通过
arm-linux-readelf -d madplay 查看madplay 运行所需要的库文件,除了上述编译的库文件外,还需要libm.so.6 和libc.so.6 c的标准库文件,这两个标准库文件可以在pc端linux系统中的arm-linux-gcc工具链安装目下的lib文件下去拷贝。 步骤2视自己情况而定,tiny6410开发板在编译系统时,已经编译了常用的c语言标准库,所以这里就不需要步骤2的操作。
2.测试usb摄像头
这一块相对比容易,因为tiny6410系统已经支持usb摄像头,不过只支持某些型号的摄像头,这里主要支持uvc协议的usb摄像头,所以在选择摄像头的时候要注意,也可以选择其他类型的usb摄像头,不过需要自己移植摄像头驱动程序。
将你的usb摄像头插在tiny6410开发板上,如果串口终端能打印出有关usb摄像头的信息(生产厂家,摄像头型号,支持视频的格式),说明你的开发板支持此型号的usb摄像头。这里提供一个usb摄像头的测试程序camera.c供测试。
3.appweb的测试
请参考的博客http://blog.youkuaiyun.com/qq_28693567/article/details/51235723
4.编写一个简单的测试网站,测试整体功能,由于本人不擅长网站开发,这里不做说明。不过这里我给大家提供一个我修改的测试网站,供大家参考:http://download.youkuaiyun.com/my/uploads/1
五.拷贝库文件及二进制可执行文件到tiny6410上并修改配置文件
1.将madplay运行所需要的库文件拷贝开发板的/lib/目录下;将motion运行需要的动态库文件也拷贝/lib/目录下。
2.将/home/Motion/motion-3.2.12/_install/etc/motion-dist.conf 拷贝到开发板/etc/motion/ (/etc/下并没有motion文件夹,自己手动创建)。
3.将/home/Motion/madpaly-0.15.2b/_install/bin/madpaly 拷贝到开发板/usr/local/sbin/ ; 将/home/Motion/motion-3.2.12/_install/bin/motion也拷贝到开发板/usr/local/sbin/ ;这里appweb的二进制可行文件及配置文件的移动参考我的博客。
4.修改配置文件
(1)修改motion的配置文件
videodevice /dev/video2 usb设备文件
v4l2_palette 2 图像采用'MJPEG'的格式
width 640 图像像素
height 320
framerate 15 一秒钟采集图像的帧数
threshold 1500 两幅图像之间变化的像素点
locate on 加框
target_dir /sdcard/www/sd 采集的图片及视频存放在该目录下。
on_motion_detected madplay 123.mp3 当usb摄像头捕捉到移动图像会发出报警 通过调用 madplay播放 123.mp3
(2)配置appeb的配置文件
还是参考我的apppweb移植的博客,这里重点说明将appweb.conf文件中的
DocumentRoot "/sdcard/www/data" 改为测试网站的路径即可。
5.网站编写这一块,我是在网上下载了一个,基于那个改的,若采用我使用的测试网站请在http://download.youkuaiyun.com/my/uploads/1下载网站测试源文件,解压后打开image.c文件找到 total=list_pic("/sdcard/www/sd","jpg");该路径就是motion捕获图像保存的根路径。