一、编译环境
主机环境 :BPI-M64
交叉工具链 :ARM-linux-gcc
摄像头 :UVC免驱摄像头
二、移植过程
1、配置内核使其支持芯片为中微星的ZC3XX的u***摄像头
- #Make menuconfig
- Device Drivers --->
- <*> Multimedia support --->
- <*> Video For Linux
- [*] Enable Video For Linux API 1 (DEPRECATED)
- [*] Video capture adapters --->
进入Video capture adapters 选项
- [*] V4L USB devices (NEW) --->
- <*> USB Video Class (UVC)
- [*] UVC input events device support
- <*> GSPCA based webcams --->
- <*> ZC3XX USB Camera Driver
2、重新编译内核
4、MJPG-streamer的移植
MJPG-streamer的移植需要jpeg的库,所以我们先移植jpeg的库
(1)jpeg库的移植
1)jpeg源码包
2)解压源码包
- #tar xvf jpegsrc.v8c.tar.gz
3)配置源码
- #cd jpeg-8c
- #./configure --prefix=/home/edu/share/video/jpeg --host=arm-linux
4)编译、安装
5)拷贝库到开发板根文件系统中
- #cp /home/edu/share/video/jpeg/lib/libjpeg.so.* <开发板>/lib -rfa
注:假如运行程序出现打不开libjpeg.so.62,进入开发板lib目录
ln -s libjpeg.so.8.0 libjpeg.so.62
(2)MJPG-streamer的移植
1)MJPG-streamer源码包
2)解压源码
- #tar xvf mjpg-streamer-r63.tar.gz
3)修改源码
修改plugins/input_uvc/Makfile
修改
CFLAGS += -O2 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC
为
CFLAGS += -O2 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC -I/home/edu/share/video/jpeg/include
修改
$(CC) $(CFLAGS) -ljpeg -o $@ input_ uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo
为
$(CC) $(CFLAGS) -ljpeg -L/home/edu/share/jpeg/lib -o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo
4)编译
#make CC=arm-linux-gcc
(3)复制应用程序和库到开发板根文件系统中
#mkdir <开发板>/usr/mjpg-streamer
#cp *.so <开发板>/usr/mjpg-streamer/ -rfa
#cp mjpg-streamer <开发板>/usr/mjpg-streamer/
#cp www <开发板>/usr/mjpg-streamer/ -rf
(4)进入MJPG-streamer目录在开发板运行
注:必须先插入u***摄像头
#./mjpg_streamer -i "./input_uvc.so -y -r 320*480" -o "./output_http.so -w ./www"
默认端口8080,默认设备/dev/video0,必须设置输出分辨率
Input_screen.so
(5)在源码目录下有start.sh,这个脚本里有一些MJPG-streamer的使用方法及说明,
可以执行start.sh脚本运行视频服务器,首先注释掉所有行,然后添加以下几行:
export LD_LIBRARY_PATH="$(pwd)"
WEBSERVER=.
$WEBSERVER/mjpg_streamer -o "$WEBSERVER/output_http.so -p 8000 -w $WEBSERVER/www" -i "$WEBSERVER/input_uvc.so -y -r 320*480 -d /dev/video0"
(6)测试
打开浏览器输入http://172.20.224.20(开发板的IP):8080(端口号)
例如:http://172.20.224.20:8080
在MJPG-streamer源码下有一个www的目录,结合web服务器(boa)可以实现一些其他相关功能。
(7)参数说明
-o输出选项
-i输入选项
-d指定摄像头在/dev目录下的设备文件
-r指定输出分辨率
-w指定网页存放的路径
-p指定端
最终实现效果如下