【ARM-Linux开发】TI AM437x调试WEB CAM
来源:互联网 发布:哪个软件买书最便宜 编辑:程序博客网 时间:2024/06/06 15:41
Rico Board是基于TI AM437x的一款小型学习板,提供的丰富的接口以及资源,能够实现很多有趣的idea,从本周起,开始总共四期的实验教程,帮助玩家们快速上手Rico Board在嵌入式上面的应用。
Lab 1 是使用Rico Board实现网络摄像头的应用。
前言
这里我们采用的方案是使用USB摄像头采集图像,然后通过网络在电脑的浏览器或客户端上显示。如果要实现这么一个应用,软件由这么几个部分组成,首先需要的是内核对USB的驱动,然后是采集,视频传输服务程序,如果使用客户端还需要电脑上的客户端程序。早在Linux Kernel版本2.4的时代,就有一个著名的SPCA5xx系列驱动,它是的起因是由一个法国医生由于在Linux上面找不到USB摄像头的驱动而自己开发的一个项目,之后这个项目支持的摄像头越来越多,如今该驱动已经被继承进了Linux Kernel主分支中,项目也施法最终版后关闭完结,但大家仍然可以访问http://mxhaard.free.fr/来下载改项目的源代码。关于这个法国医生的相关故事可以阅读这里。
但是如今内核版本已经发展到了3.1x,同时原来的V4L1也进化到了V4L2,因此改项目中包含的servfox和spcaview这对C/S结构的程序已经不能用了,当年的Jpeg、Mpeg编码也发展到了如今的H.264,H.265,另外现在还有更通用的UVC(USB Video Camera)架构的摄像头驱动标准,基于的软件也变为了UVC驱动+mjpg-streamer实现。当然内核版本是2.4或2.6的系统还是可以使用SPCA5xx+servfox+spcaview的软件来实现webcam应用的。
开始移植
UVC驱动
配置内核编译选项
搜索找到UVC选项,选择UVC驱动
重新编译内核。
至于其他USB摄像头驱动,SPCA5xx可以选择驱动,但由于之后使用的应用程序是V4L2,SPCA5xx接口是V4L1,所以就不再测试了。
交叉编译mjpg-streamer
下载r182版本的mjpg-streamer,(r63版本支持有问题)
http://sourceforge.net/code-snapshots/svn/m/mj/mjpg-streamer/code/mjpg-streamer-code-182.zip
交叉编译jpeg库
RicoBoard默认安装Matrix Gui,文件系统上已经集成了jpeg库,可以忽略这部,如果使用的是其他文件系统,还需要编译jpeg库。
下载jpeg库源码:http://www.ijg.org/files/jpegsrc.v9.tar.gz
修改mjpg-streamer包含v9版本库。
编译mjpeg-streamer
实验结果
将/home/myir/targetNFS/目录中编译生成的二进制文件,全部拷贝到目标开发板的根目录。也可以直接下载使用本文附件中提供的编译好的文件,将mjpg_streamer.tar.gz文件,拷贝进开发板文件系统,执行:
将lib文件夹下三个库文件input_uvc.so,output_http.so,libjpeg.so.9拷贝到/lib目录下,将www整个目录拷贝到根目录下,
然后在开发板命令行执行:
注意:
1.如果是Matrix Gui文件系统,需要关闭Matrix或杀掉http进程,释放端口。
2.执行中,如果出现错误,需要根据摄像头支持的格式,修改源文件,市面上大部分摄像头都是支持YUV的,而不是JPEG的
如果摄像头支持YUV的,修改format = V4L2_PIX_FMT_YUYV
以上就设置了默认的图像格式,重新把模块编译,之后就成功了!
在PC端打开浏览器,访问:http://<Rico Board IP>:8080/?action=stream,就可以看到流畅的视频流了
Lab 1 是使用Rico Board实现网络摄像头的应用。
前言
这里我们采用的方案是使用USB摄像头采集图像,然后通过网络在电脑的浏览器或客户端上显示。如果要实现这么一个应用,软件由这么几个部分组成,首先需要的是内核对USB的驱动,然后是采集,视频传输服务程序,如果使用客户端还需要电脑上的客户端程序。早在Linux Kernel版本2.4的时代,就有一个著名的SPCA5xx系列驱动,它是的起因是由一个法国医生由于在Linux上面找不到USB摄像头的驱动而自己开发的一个项目,之后这个项目支持的摄像头越来越多,如今该驱动已经被继承进了Linux Kernel主分支中,项目也施法最终版后关闭完结,但大家仍然可以访问http://mxhaard.free.fr/来下载改项目的源代码。关于这个法国医生的相关故事可以阅读这里。
但是如今内核版本已经发展到了3.1x,同时原来的V4L1也进化到了V4L2,因此改项目中包含的servfox和spcaview这对C/S结构的程序已经不能用了,当年的Jpeg、Mpeg编码也发展到了如今的H.264,H.265,另外现在还有更通用的UVC(USB Video Camera)架构的摄像头驱动标准,基于的软件也变为了UVC驱动+mjpg-streamer实现。当然内核版本是2.4或2.6的系统还是可以使用SPCA5xx+servfox+spcaview的软件来实现webcam应用的。
开始移植
UVC驱动
配置内核编译选项
1
make
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
搜索找到UVC选项,选择UVC驱动
Device Drivers --->
<*> Multimedia support --->
Media USB Adapters --->
<*> USB Video Class (UVC)
UVC input events device support
重新编译内核。
至于其他USB摄像头驱动,SPCA5xx可以选择驱动,但由于之后使用的应用程序是V4L2,SPCA5xx接口是V4L1,所以就不再测试了。
交叉编译mjpg-streamer
下载r182版本的mjpg-streamer,(r63版本支持有问题)
http://sourceforge.net/code-snapshots/svn/m/mj/mjpg-streamer/code/mjpg-streamer-code-182.zip
1
2
3
uzip mjpg-streamer-code-182.zip
cd
mjpg-streamer-code-182
make
CC=arm-linux-gnueabihf-gcc DESTDIR=
/home/myir/targetNFS/
install
交叉编译jpeg库
RicoBoard默认安装Matrix Gui,文件系统上已经集成了jpeg库,可以忽略这部,如果使用的是其他文件系统,还需要编译jpeg库。
下载jpeg库源码:http://www.ijg.org/files/jpegsrc.v9.tar.gz
1
2
3
4
5
tar
-zxvf jpegsrc.v9.
tar
.gz
cd
jpegsrc-9a
.
/configure
CC=arm-linux-gnueabihf-gcc --host=arm-unknown-linux --prefix=
/home/myir/targetNFS/
--
enable
-shared --
enable
-static
make
make
install
修改mjpg-streamer包含v9版本库。
1
2
3
4
5
6
vi
mjpg-streamer-code-182
/mjpg-streamer/plugins/input_uvc/Makfile
-- CFLAGS += -O2 -DLINUX -D_GNU_SOURCE -Wall
++ CFLAGS += -O2 -DLINUX -D_GNU_SOURCE -Wall -I
/home/myir/jpeg-9/jpeg/include
-- $(CC) $(CFLAGS) -o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo $(LFLAGS)
++ $(CC) $(CFLAGS) -ljpeg -L
/home/myir/targetNFS/lib
-o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo
编译mjpeg-streamer
1
make
CC=arm-linux-gnueabihf-gcc DESTDIR=
/home/myir/targetNFS/
install
实验结果
将/home/myir/targetNFS/目录中编译生成的二进制文件,全部拷贝到目标开发板的根目录。也可以直接下载使用本文附件中提供的编译好的文件,将mjpg_streamer.tar.gz文件,拷贝进开发板文件系统,执行:
1
2
tar
zxvf mjpg_streamer.
tar
.gz
cd
mjpg_streamer
将lib文件夹下三个库文件input_uvc.so,output_http.so,libjpeg.so.9拷贝到/lib目录下,将www整个目录拷贝到根目录下,
然后在开发板命令行执行:
1
mjpg_streamer -i
"/lib/input_uvc.so"
-o
"/lib/output_http.so -w /www"
注意:
1.如果是Matrix Gui文件系统,需要关闭Matrix或杀掉http进程,释放端口。
1
2
/etc/init
.d
/matrix-gui-2
.0 stop
kill
$(
ps
|
grep
"http"
|
awk
'{print $1}'
)
2.执行中,如果出现
1
2
Unable to
set
format
: 1196444237 res: 640x480
Init v4L2 failed !!
exit
fatal
01
02
03
04
05
06
07
08
09
10
11
12
13
14
[fire@fire mjpg-streamer]$
cd
mjpg-streamer
/plugins/input_uvc/
[fire@fire input_uvc]$ vim 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;
/* initialize the mutes variable */
if
(pthread_mutex_init(&cams[
id
].controls_mutex, NULL) != 0) {
IPRINT(
"could not initialize mutex variable\n"
);
exit
(EXIT_FAILURE);
}
......................
如果摄像头支持YUV的,修改format = V4L2_PIX_FMT_YUYV
以上就设置了默认的图像格式,重新把模块编译,之后就成功了!
在PC端打开浏览器,访问:http://<Rico Board IP>:8080/?action=stream,就可以看到流畅的视频流了
camera, Board
0 0
- 【ARM-Linux开发】TI AM437x调试WEB CAM
- TI AM437X开发板 Rico Board --米尔科技
- 【ARM-Linux开发】ti CMEM使用
- 【ARM-Linux开发】TI 关于Gstreamer使用的几个参考
- TI-Davinci开发系列之四CCS5.2使用XDS560v2在线调试ARM/DSP程序
- Linux AM437X timer产生PWM
- 【Linux开发】CCS远程调试ARM,AM4378
- 如何基于TI AM437x芯片快速设计工业通信产品
- usb CAM 调试
- 用eclipse集成开发环境开发、调试arm linux程序
- TI-Davinci开发系列之六CCS5.2调试Linux内核
- ARM开发调试教程
- linux-arm gdb调试
- arm linux 调试记录
- 嵌入式开发远程调试arm-linux-gdb的移植
- TI AM3552开发板(arm cortex A8) 初体验
- 这只是个网站关于TI ARM linux移植
- CAM
- C++ Deque(双向队列)
- Java笔记 - 集合(Arrays)
- 数学符号arg含义
- Android Theme 主题总结
- openstack_juno高可用部署错误总结
- 【ARM-Linux开发】TI AM437x调试WEB CAM
- git的命令总结
- HTML每日一结1.11
- 在SSH中占位符的使用
- VS编译环境中TBB配置和C++中lambda表达式
- task_struct(进程描述符)
- BloomFilter
- 配置xml避免Spring加载两次bean
- 桥接模式(python)