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驱动


配置内核编译选项

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

错误,需要根据摄像头支持的格式,修改源文件,市面上大部分摄像头都是支持YUV的,而不是JPEG的

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,就可以看到流畅的视频流了

 






mjpg_streamer.tar.gz

498.38 KB, 下载次数: 1242

包含编译好的库文件和可执行的mjpg_steamer二进制文件

【ARM-Linux开发】TI AM437x调试WEB CAM的更多相关文章

  1. 在Ubuntu上建立Arm Linux 开发环境

    我使用的是友善2410的板子,以前都是用Fedora,现在家里的电脑被我转为Linux专用的了,装的是Ubuntu.但是嵌入式还是要玩的,在装载过程中也遇到一些小麻烦.在此记录一下,一来自己比较健忘, ...

  2. 成功移植SQLite3到ARM Linux开发板

    SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了 ...

  3. minigui移植到arm linux开发板上无法执行

    要保证目录下有该文件 /etc/MiniGUI.cfg 复制过程使用cp –af 强制复制

  4. 应聘linux/ARM嵌入式开发岗位

    **************************************************************** 因为发在中华英才和智联招聘没有人采我所以我 在这里发布我的个人简历希望 ...

  5. 【DSP开发】【Linux开发】基于ARM+DSP进行应用开发

    针对当前应用的复杂性,SOC芯片更好能能满足应用和媒体的需求,集成众多接口,用ARM做为应用处理器进行多样化的应用开发和用户界面和接口,利用DSP进行算法加速,特别是媒体的编解码算法加速,既能够保持算 ...

  6. VS2015配置Linux开发远程调试

    # VS2015配置Linux开发远程调试 ### 简介-----------------------------vs2015支持跨平台开发 ### 软件环境--------------------- ...

  7. Qemu搭建ARM vexpress开发环境(二)----通过u-boot启动Linux内核

    Qemu搭建ARM vexpress开发环境(二)----通过u-boot启动Linux内核 标签(空格分隔): Qemu ARM Linux 在上文<Qemu搭建ARM vexpress开发环 ...

  8. 【Qt开发】【VS开发】【Linux开发】OpenCV、Qt-MinGw、Qt-msvc、VS2010、VS2015、Ubuntu Linux、ARM Linux中几个特别容易混淆的内容

    [Qt开发][VS开发][Linux开发]OpenCV.Qt-MinGw.Qt-msvc.VS2010.VS2015.Ubuntu Linux.ARM Linux中几个特别容易混淆的内容 标签:[Qt ...

  9. 构建 ARM Linux 4.7.3 嵌入式开发环境 —— BusyBox 构建 RootFS

    上一篇我们已经成功将 ARM Linux 4.7.3 的内核利用 U-BOOT 引导了起来.但是细心的你会发现,引导到后面,系统无法启动,出现内核恐慌 (Kernel Panic). 原因是找不到文件 ...

随机推荐

  1. HTML 005 标题

    <h1>这是一个标题.</h1> <h2>这是一个标题.</h2> <h3>这是一个标题.</h3> HTML 标题 在 HTM ...

  2. LOJ P10118 打鼹鼠 题解

    每日一题 day17 打卡 Analysis 二维树状数组的单点修改和区间查询,和一维的差不多 #include<iostream> #include<cstdio> #inc ...

  3. 【.Net设计模式系列】仓储(Repository)模式 ( 一 )

    开篇 2016新年伊始,望眼过去,不知不觉在博客园已经注册8个月啦,由于最近忙于工作,博客迟迟没有更新.直到最近一直研究.Net设计模式,对一些模式有所感悟,故拿出自己的心得与大家分享,在接下来的所有 ...

  4. Ubuntu18.04开机动画(bootsplash)安装

    一.搜索喜欢的主题 1.通过软件源搜索,这个比较简单但是没有太喜欢的.-----------------------------------------------------------pipci@ ...

  5. 为什么会选择redis数据库?

    因为redis支持主从同步,而且数据都是缓存在内存中,所以基于redis的分布式爬虫,对请求和数据的高频读取效率非常高

  6. Java Heap dump文件分析工具jhat简介

    jhat 是Java堆分析工具(Java heap Analyzes Tool). 在JDK6u7之后成为标配. 使用该命令需要有一定的Java开发经验,官方不对此工具提供技术支持和客户服务. 用法: ...

  7. CSPS2019谢幕记

    留坑待填. 开始填坑. Day -1 最后一场模拟题.T1花2h切掉,T2啥都不会,T3看出部分解法然后写了暴搜,教练没放子任务,得了45,然后就$rk3$了. 晚上疯狂写板子,1.5h写了8份板子. ...

  8. IDEA的版本控制

    参考:https://blog.csdn.net/qq_35246620/article/details/70792861 1.从远程仓库下载项目 2.提交项目到远程仓库

  9. qt 添加本程序的注册表项

    QStringcmd; cmd.clear(); QStringapplication_path=QCoreApplication::applicationFilePath();//带文件扩展名的全路 ...

  10. python arcgis