详解移植mjpg_streamer到arm板
来源:互联网 发布:淘宝店铺转让安全吗 编辑:程序博客网 时间:2024/05/18 03:07
介绍:
Mjpg‐streamer是一个开源软件,用于从webcam摄像头采集图像,把它们以流的形式通过基于ip的网络传输到浏览器如Firefox,Cambozola,VLC播放器,Windows的移动设备或者其他拥有浏览器的移动设备.
mjpg-streamer 可以通过文件或者是HTTP方式访问linuxUVC兼容摄像头。
—————————————————————————————————————————————————
本文作一个移植记录。
前天买了个优迈Q5USB摄像头,准备用来做毕业设计,需要移植mjpg_streamer。昨天在移植的时候折腾了一下,现在已成功移植到九鼎x210板子(S5PV210)上,能够在ubuntu下的火狐浏览器打开摄像头采集画面,下面开始记录移植过程。
—————————————————————————————————————————————
一、环境
主机环境:ubuntu14.04
目标机:九鼎创展科技的x210开发板(S5PV210)
主机工具链:gcc-4.8.2
交叉工具链:arm-none-linux-gnueabi-gcc-4.4.1
(用一个软连接“arm-linux-gcc”指向它,下面有参数会用到它)
____________________________________________________________________________________________________________
二、移植过程
1、配置内核是内核支持UVC格式的摄像头(其实默认支持UVC,它是标准协议), 最后一步时根据自己需要进行选择摄像头配置。
,烧录到板子,启动后 将USB摄像头插进板子串口有信息自动弹出时,即识别成功。
1、配置内核是内核支持UVC格式的摄像头
DeviceDrivers
make -j2
3、mjpg-stream的移植
mjpg-stream的资料可以在下面这个网址查看(全英文):http://sourceforge.net/apps/mediawiki/mjpg-streamer/index.php?title=Main_Page
mjpg-stream最新版下载网址是:http://mjpg-streamer.svn.sourceforge.net/viewvc/mjpg-streamer/
(进去后,点右上的“Download Snapshot”下载最新版的mjpg-streamer-code-182,因为旧版编译时会出现缺少一个头文件的错误)
mjpg-stream的移植需要jpeg的库,所以我们先移植jpeg的库,即需要libjpeg
第一步:jpeg库的移植
1)jpeg源码包通过下面这个网址下载
http://www.ijg.org/files/jpegsrc.v8b.tar.gz
2)解压源码包
tar xvf jpegsrc.v8b.tar.gz
3)配置源码,下面的配置很重要,自行定义jpeg安装目录(得先创建那 文件夹),并使用交叉工具链编译jpeg库(要不然会出现编译mjpg_streamer的input_uvc.o时找不到兼容的ljpeg错误!)
mjpg-stream的移植需要jpeg的库,所以我们先移植jpeg的库
第一步:jpeg库的移植
1)jpeg源码包通过下面这个网址下载
http://www.ijg.org/files/jpegsrc.v8b.tar.gz
2)解压源码包
tar xvf jpegsrc.v8b.tar.gz
3)配置源码
cd jpeg-8b ,在命令行分别输入下面命令配置:
make
5)安装,执行 makeinstall 命令后,在上面配置的/usr/local/src/out_jpeg文件夹中便出现了一些文件夹,包括bin、include、lib、share,红色这两个文件夹便是mjpg_streamer需要的。
./configure --prefix=/usr/local/src/out_jpeg -host=arm-none-linux-gnueabi
./configure CC=arm-linux-gcc --prefix=/usr/local/src/out_jpeg-host=arm-none-linux-gnueabi
4)编译 make
5)安装
6)拷贝上面的lib文件夹即jpeg库到文件系统中
cp /usr/local/src/out_jpeg/lib /root/rootfs/rootfs/lib -rf
cp /usr/local/src/out_jpeg/lib
(/root/rootfs/rootfs此目录为自己的文件系统目录,arm板是挂载ubuntu中此目录作为根文件系统的)
第二步、移植mjpg-streamer
1、将下载最新版本的源码解压至/usr/local/src/,目录mjpg-streamer-code-182里内容如下:
1、将下载最新版本的源码解压至/usr/local/src/,目录mjpg-streamer-code-182里内容如下:
doc
mjpg-streamer
udp_client
mjpeg-client
mjpeg-client
mjpg-streamer-experimental
uvc-streamer
————————部分说明:
mjpg-streamer :目录下提供了 的执行程序和各个输入输出设备组件
uvc-streamer : 目录下提供了uvc-streamer的可执行目录
mjpeg-client:: 分别有 linux和windows的客户端
mjpg-streamer :目录下提供了 的执行程序和各个输入输出设备组件
uvc-streamer : 目录下提供了uvc-streamer的可执行目录
mjpeg-client:: 分别有 linux和windows的客户端
————————
2、进入目录
cd mjpg-streamer
3、(1)修改源码顶层的Makefile及 plugins文件夹里面所有子层的Makefile中的CC参数为arm-linux-gcc,即将所有“CC= gcc”改为“CC =arm-linux-gcc”,哈哈,不得不花上几分钟去修改。
2、进入目录
cd mjpg-streamer
3、(1)修改源码
(2)进入/plugins/input_uvc/Makfile,
修改
修改
CFLAGS += -O1 -DLINUX -D_GNU_SOURCE -Wall -shared-fPIC
为
CFLAGS += -O1 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC-I /usr/local/src/out_jpeg/include
修改
(CC)(CFLAGS) -o@inputuvc.cv4l2uvc.lojpegutils.lodynctrl.lo(LFLAGS)
为
(CC)(CFLAGS) -L /usr/local/src/out_jpeg/lib-o@inputuvc.cv4l2uvc.lojpegutils.lodynctrl.lo(LFLAGS)
(注:/usr/local/src/out_jpeg/lib就是上面移植jpeg库后安装的目录,根据自己设置的目录来修改)
为
CFLAGS += -O1 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC-I
修改
(CC)(CFLAGS) -o@inputuvc.cv4l2uvc.lojpegutils.lodynctrl.lo(LFLAGS)
为
(CC)(CFLAGS) -L
(注:/usr/local/src/out_jpeg/lib就是上面移植jpeg库后安装的目录,根据自己设置的目录来修改)
这样,mjpg_streamer就和jpeg库绑定了。
4、编译:make (make clean为清除编译)
5、在开发板挂载的ubuntu文件系统目录中(本人为/root/rootfs/rootfs)建立mjpg-streamer安装目录
mkdir
再将源码目录mjpg-stream整个拷贝到/root/rootfs/rootfs/mjpg-streamer目录下,然后就可以测试啦
cp mjpg-stream /root/rootfs/rootfs/mjpg-streamer-rf
6、测试
(启动arm板,板子应设置好环境变量,让arm板通过tftp下载内核和挂载好ubuntu中的自制作文件系统)
启动后,插进USB摄像头,进入板子的mjpg-streamer 目录,
执行 ./start.sh;
若没有出现错误,则在PC机打开一个网页,输入http://192.168.1.20:8080/?action=stream就可以看到图像。
(ip为arm板的ip)
————————————————移植完毕————————————————————————
若出现下面错误:
Unable to set format: Invalid argument
Init v4L2 failed !! exit fatal
i: init_VideoIn failed
错误原因:
市面上大部分摄像头都是支持YUV的,而不是JPEG的。mjpg-stream支持JPEG和YUV两种格式。
解决方法:
[fire@fire mjpg-streamer]$cdmjpg-streamer/plugins/input_uvc/
[fire@fire input_uvc]$vi input_uvc.c
int input_init(input_parameter *param, int id){ char *dev = "/dev/video0", *s; int width = 640, height = 480, fps = -1, format = V4L2_PIX_FMT_MJPEG, i; if(pthread_mutex_init(&cams[id].controls_mutex, NULL) != 0) { IPRINT("could not initialize mutex variable\n"); exit(EXIT_FAILURE); }.......................
将上面红色代码改为:format =V4L2_PIX_FMT_YUYV
以上就设置了默认的图像格式,重新在顶层把模块编译,再次cpmjpg-stream
1 0
- 详解移植mjpg_streamer到arm板
- tcpdump移植到arm板
- minicom移植到ARM板
- 移植OpenSSH到ARM板
- json移植到ARM板
- 移植Sqlite到ARM板
- v4l2摄像头移植mjpg_streamer笔记
- v4l2摄像头移植mjpg_streamer笔记
- 准备移植xynth到arm板上了。
- 移植BlueZ到ARM开发板【转】
- 移植pcap库到ARM开发板
- Mplayer移植到Arm开发板
- 移植 sshd到arm开发板
- Mplayer移植到Arm开发板
- 移植SQLite3到ARM开发板
- 移植iptables命令到ARM开发板
- 移植ubuntu core到Arm开发板
- qwt移植到arm开发板
- 加权并查集(银河英雄传说,Cube Stacking)
- grep常用备忘操作
- 中文字符所占字节
- 嵌入式Linux中摄像头使用简要整理
- Zjnu Stadium(加权并查集)
- 详解移植mjpg_streamer到arm板
- httpClient模拟浏览器发请求
- Linux下修改时间
- codevs1074 食物链
- jQuery.add() 函数详解
- QT程序到arm(A8)板的移植之旅
- 后缀数组详解+模板
- idea常用快捷键
- 洛谷 P2731 骑马修栅栏 Riding the Fences