打印

TI AM437X开发板Rico Board学习笔记1-实现网络摄像头的应用

[复制链接]
1826|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
armcn|  楼主 | 2015-6-25 10:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Rico Board是基于TI AM437x的一款小型学习板,提供的丰富的接口以及资源,能够实现很多有趣的想法。
下面介绍的是使用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-snap ... reamer-code-182.zip
1 uzip mjpg-streamer-code-182.zip
2 cd mjpg-streamer-code-182
3 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 tar -zxvf jpegsrc.v9.tar.gz
2 cd jpegsrc-9a
3 ./configure CC=arm-linux-gnueabihf-gcc --host=arm-unknown-linux --prefix=/home/myir/targetNFS/ --enable-shared --enable-static
4 make
5 make install

修改mjpg-streamer包含v9版本库。

1 vi mjpg-streamer-code-182/mjpg-streamerplugins/input_uvc/Makfile
2 -- CFLAGS += -O2 -DLINUX -D_GNU_SOURCE -Wall
3 ++ CFLAGS += -O2 -DLINUX -D_GNU_SOURCE -Wall -I/home/myir/jpeg-9/jpeg/include
4
5 -- $(CC) $(CFLAGS) -o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo $(LFLAGS)
6 ++ $(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/目录中编译生成的二进制文件,全部拷贝到目标开发板的根目录。
在开发板命令行执行:
1 mjpg_streamer -i "/lib/input_uvc.so" -o -n"/lib/output_http.so -w /www"

注意:如果是Matrix Gui文件系统,需要关闭Matrix或杀掉http进程,释放端口。
1 /etc/init.d/matrix-gui-2.0 stop
2 kill $(ps | grep "http" | awk '{print $1}')

在PC端打开浏览器,访问:http://<Rico Board IP>:8080/?action=stream

相关帖子

沙发
dirtwillfly| | 2015-6-25 10:57 | 只看该作者
那么快就出产品了

使用特权

评论回复
板凳
mini1986| | 2015-6-25 17:10 | 只看该作者
关注一下......

使用特权

评论回复
地板
可可球| | 2015-7-7 22:24 | 只看该作者
什么是交叉编译

使用特权

评论回复
5
米尔豪斯| | 2015-7-8 18:44 | 只看该作者
大师之作啊,支持一下

使用特权

评论回复
6
dirtwillfly| | 2015-7-9 09:06 | 只看该作者

可以简单理解成:在一个操作系统上编译另一个操作系统

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

51

帖子

1

粉丝