Linux下使用mjpg-streamer实现监控

现在需要让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

这是我的成果:

Linux下使用mjpg-streamer实现监控


这次测试过程中,因为开了两个虚拟机的原因,导致忘记把摄像头接上当前使用的系统了,运行时出现错误:

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。浪费了很多时间,大意啊。

你可能感兴趣的:(V4L)