我们希望在FSPAD_702平板的Linux实验项目中使用视频监控功能,首先选择的就是开源的MJPG-Streamer视频流服务器。 MJPG-Streamer可以通过文件或者是HTTP方式访问Linux UVC摄像头。
由于平板摄像头采集上的数据为YUV格式,而我们希望得到JPEG的压缩图像,所以需要JPEG库的支持。
a) 下载JPEG库
通过下面这个网址下载JPEG源码: http://www.ijg.org/files/jpegsrc.v8b.tar.gz
b) 配置JPEG源码
$ tar xvf jpegsrc.v8b.tar.gz $ cd jpeg-8b $ ./configure --prefix=/home/linux/home/lee/workdir/farsight/fspad/jpeg/jpeg-arm --host=arm-none-linux-gnueab // --prefix为指定安装的目录 // --host为编译使用的交叉工具链
如下图即成功生成编译使用的Makefile。
c) 编译和安装
$ make –j2 //编译 $ make install //安装到指定目录
如下即编译安装成功:
编译生成的库:
d) 添加到文件系统中
把编译生成的库拷贝的我们使用的文件系统中。
$ cd jpeg-arm $ cp lib/* /source/rootfs/lib/ // /source/rootfs 为文件系统的路径
a) 下载MJPG-Streamer源码
通过下面这个网址下载MJPG-Streamer源码包:http://sourceforge.net/projects/MJPG-streamer/
b) 配置MJPG-Streamer源码:
i. 修改Makefile文件
修改顶层Makefile以及所有子层Makefile文件中的编译工具项:
CC = gcc // 修改为: CC = arm-none-linux-gnueabi-gcc
ii. 再次修改plugins/input_uvc/Makfile文件
第16行添加需要使用JPEG库头文件的路径:
16 CFLAGS += -I/home/linux/workdir/farsight/fspad/jpeg/jpeg-arm/include
第24行添加编译input_uvc.so所使用的库文件的路径:
$(CC) $(CFLAGS) -ljpeg -o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo // 修改为: $(CC) $(CFLAGS) –ljpeg -L/home/linux/workdir/farsight/fspad/jpeg/jpeg-arm/lib -o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo
iii. 修改plugins/input_uvc/v4l2uvc.c
第99行static int init_v4l2(struct vdIn *vd)函数内添加:
/* FSPAD_702 Linux added by LeeSheen */ #if 1 struct v4l2_input inp; inp.index = 0; if (-1 == ioctl(vd->fd, VIDIOC_S_INPUT, &inp)) printf("VIDIOC_S_INPUT error\n"); #endif
第195行mmap函数参数中添加:
vd->buf.length, PROT_READ, MAP_SHARED, vd->fd, // 修改为 vd->buf.length, PROT_READ | PROT_WRITE, MAP_SHARED, vd->fd,
c) 编译MJPG-Streamer源码
$ make clean $ make –j2
如下即编译成功:
d) 添加到文件系统中
把编译生成的应用和库拷贝的我们使用的文件系统中。
$ cp *.so /source/rootfs/mjpg // /source/rootfs 为文件系统的路径 $ cp mjpg-streamer /source/rootfs/bin
a) 加载平板Camera驱动
# insmod videobuf-core.ko # insmod videobuf-dma-contig.ko # insmod gc0308.ko # insmod sun5i_csi0.ko
b) 运行MJPG-Streamer程序
# mjpg_streamer -i "/mjpg/input_uvc.so -y" -o "/mjpg/output_http.so -w 192.168.100.191:8080" &
c) 打开网页,输入网址查看摄像头信息。
浏览器上执行:http://192.168.100.191:8080/?action=snapshot (每次回车单张抓拍)或者http://192.168.100.191:8080/?action=stream (视频流)至此,MJPG-Streamer视频服务器就移植成功了。