现在需要让ZC301摄像头在Linux主机上跑起来,使用的是mjpg-streamer视频流服务器。
本人菜鸟,刚开始玩摄像头。通过三天不断的失败和查找之后才发现,2.6.38以后的内核版本已经移除了对 v4l1 的支持,也就是说在高版本内核的系统中的/usr/include目录下找不到头文件,会导致执行./configure的时候会出现错误:“configure: error: Could not find linux/videodev.h”。
后来我按照网上的方法:把plugins目录下的.c和.h文件里的#include< linux/videodev.h>都修改为#include< linux/videodev2.h>,结果出现的错误更让人抓狂:
make[1]: 正在进入目录 `/home/linux/workdir/mjpg-streamer/mjpg-streamer/plugins/input_gspcav1'
gcc -c -O2 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC -o spcav4l.lo spcav4l.c
In file included from spcav4l.c:25:
spcav4l.h:134: 错误: 字段‘vmmap’的类型不完全
spcav4l.h:135: 错误: 字段‘videocap’的类型不完全
spcav4l.h:137: 错误: 字段‘videombuf’的类型不完全
spcav4l.h:138: 错误: 字段‘videopict’的类型不完全
spcav4l.h:139: 错误: 字段‘videowin’的类型不完全
spcav4l.h:140: 错误: 字段‘videochan’的类型不完全
spcav4l.c: 在函数‘convertframe’中:
spcav4l.c:156: 错误: ‘VIDEO_PALETTE_YUV420P’未声明(在此函数内第一次使用)
spcav4l.c:156: 错误: (即使在一个函数内多次出现,每个未声明的标识符在其
spcav4l.c:156: 错误: 所在的函数内也只报告一次。)
spcav4l.c:159: 错误: ‘VIDEO_PALETTE_RGB24’未声明(在此函数内第一次使用)
spcav4l.c:162: 错误: ‘VIDEO_PALETTE_RGB565’未声明(在此函数内第一次使用)
spcav4l.c:165: 错误: ‘VIDEO_PALETTE_RGB32’未声明(在此函数内第一次使用)
......
现在先用2.6.35-22版本内核的Ubuntu测试,下次再用支持v4l2的内核版本测试。
一、环境
主机环境:ubuntu 10.10
内核版本:Linux ubuntu 2.6.35-22-generic
主机工具链:gcc version 4.4.5
摄像头:ZC301
(内核版本可以通过uname -a 查看:
Linux ubuntu 2.6.35-22-generic #33-Ubuntu SMP Sun Sep 19 20:34:50 UTC 2010 i686 GNU/Linux
摄像头型号可通过命令lsusb查看:
Bus 002 Device 007: ID 0ac8:301b Z-Star Microelectronics Corp. ZC0301 Webcam)
二、JPEG库的安装
mjpg-stream的编译需要jpeg的库,所以我们先安装jpeg的库。
文件:jpegsrc.v8b.tar.gz
下载地址:http://www.ijg.org/files/jpegsrc.v8b.tar.gz
解压:tar -xvf jpegsrc.v8b.tar.gz
配置:./configure
编译:make
安装:make install
搞定!
三、mjpg-streamer的安装
文件:mjpg-streamer-r63.tar.gz
下载地址:http://sourceforge.net/projects/mjpg-streamer/
解压:tar -xvf mjpg-streamer-r63.tar.gz
进入:cd mjpg-streamer
编译:make clean all
指定库的路径:export LD_LIBRARY_PATH=.
运行:./mjpg_streamer -o "output_http.so -w ./www"
或者直接使用:./start.sh 代替上面最后两条命令。
然后就可以通过浏览器浏览摄像头的画面:
实时浏览:http://127.0.0.1:8080/?action=stream
拍照:http://127.0.0.1:8080/?action=snapshot
这是我的成果:
MJPG Streamer Version: svn rev:
i: Using V4L2 device.: /dev/video0
i: Desired Resolution: 640 x 480
i: Frames Per Second.: 5
i: Format............: MJPEG
ERROR opening V4L interface: No such file or directory
Init v4L2 failed !! exit fatal
i: init_VideoIn failed
其实就是因为摄像头没接上,导致/dev目录下没有找到设备video0。浪费了很多时间,大意啊。