tiny6410上移植mjpg-streamer

机环境 :Ubuntu 10.10
        目标机 :FS2410(S3C2410)
        主机工具链 :gcc-4.4.5
        交叉工具链 :arm-none-linux-gnueabi-gcc-4.3.2
        摄像头 :ZC301

二、移植过程

1、配置内核是内核支持芯片为ZC301的摄像头
        Make menuconfig
                Device Drivers --->
                        <*> Multimedia support --->
                                <*> Video For Linux
                                [*] Enable Video For Linux API 1 (DEPRECATED) (NEW)
                                [*] Video capture adapters (NEW) --->
                                        [*] V4L USB devices (NEW) --->
                                                <*> USB Video Class (UVC)
                                                [*] UVC input events device support (NEW)
                                        <*> USB ZC0301[P] webcam support (DEPRECATED)

2、重新编译内核

make zImage

通过上面两个步骤就可以驱动我们的摄像头了。但是这个驱动是基于V4l2的。以前基于V4L的一些上层应用就不能用了,或需要做大量的修改!这里我们要实现网络视频的功能,以前都是用servfox这个网络视频服务器,但是这个服务器就是基于V4L的,我们如果想用的话就得对servfox的源码进行修改。这里我们选用另外一种方案mjpg-stream。

3、mjpg-stream的移植

关于mjpg-stream的资料大家可以在下面这个网址查看:

http://sourceforge.net/apps/mediawiki/mjpg-streamer/index.php?title=Main_Page
        mjpg-stream的移植需要jpeg的库,所以我们先移植jpeg的库

(1)jpeg库的移植

        1)jpeg源码包通过下面这个网址下载
                http://www.ijg.org/files/jpegsrc.v8b.tar.gz
                2)解压源码包
                tar xvf jpegsrc.v8b.tar.gz
                3)配置源码
                cd jpeg-8b
                ./configure --prefix=/home/linux/s3c2410-2.6.35/video/jpeg --host=arm-none-linux-gnueabi
                4)编译
                make
                5)安装
                make install
                6)拷贝库到文件系统中
                cp //home/linux/s3c2410-2.6.35/video/jpeg /lib/libjpeg.so.8 /source/rootfs/lib

(2)mjpg-stream的移植

        1)mjpg-stream源码包通过下面这个网址下载
                http://sourceforge.net/projects/mjpg-streamer/
                2)解压源码
                tar xvf mjpg-streamer-r63.tar.gz
                3)修改源码
                cd mjpg-streamer-r63
                修改顶层makefile及plugins目录中的各级makefile将所有
                CC=gcc
                修改为
                CC=arm-none-linux-gnueabi-gcc

        修改plugins/input_uvc/Makfile
                修改
                CFLAGS += -O2 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC
                为
                CFLAGS += -O2 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC -I/home/linux/s3c2410-2.6.35/video/jpeg/include
                修改
                $(CC) $(CFLAGS) -ljpeg -o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo
                为
                $(CC) $(CFLAGS) -ljpeg -L/home/linux/s3c2410-2.6.35/video/jpeg/lib -o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo

         jpeg_utils.c:27: fatal error: jpeglib.h: No such file or directory
                4)编译
                make
                5)测试
                mkdir /source/rootfs/mjpg
                cp *.so /source/rootfs/mjpg
                cp mjpg-stream /source/rootfs/bin

        打开开开发板运行
                mjpg_streamer -i "/mjpg/input_uvc.so" -o "/mjpg/output_http.so -w /www"
                在源码目录下有start.sh,这个脚本里有一些mjpg-stream的使用方法及说明

        打开一个网页输入下面地址就能够看到一个视频(开发板的IP为192.168.1.202):
                http://192.168.1.202:8080/?action=stream
                打开一个网页输入下面地址就能够看到一个静态图片:
                http://192.168.1.202:8080/?action=snapshot
                6)在mjpg源码下有一个www的目录,这个一个网络使用mjpg的实例,结合web服务器(boa)可以实现一些其他相关功能

本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2012-02/54797p4.htm

mjpg-stream的移植需要jpeg的库,所以我们先移植jpeg的库

(1)jpeg库的移植

        1)jpeg源码包通过下面这个网址下载
                http://www.ijg.org/files/jpegsrc.v8b.tar.gz
                2)
解压源码包
                tar xvf jpegsrc.v8b.tar.gz
                3)
配置源码
                cd jpeg-8b
                ./configure --prefix=/home/6410/video/jpeg --host=arm-linux
                4)
编译
                make
                5)
安装
                make install
                6)
拷贝libjpeg.s0.8库到开发板文件系统lib下中
 2)mjpg-stream的移植

        1)mjpg-stream源码包通过下面这个网址下载
                http://sourceforge.net/projects/mjpg-streamer/ 

                2)解压源码
                tar xvf mjpg-streamer-r63.tar.gz
                3)
修改源码
                cd mjpg-streamer-r63
                
修改顶层makefileplugins目录中的各级makefile将所有
                CC=gcc
                
修改为
                CC=arm-none-linux-gnueabi-gcc

        修改plugins/input_uvc/Makfile
                
修改
                CFLAGS += -O2 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC
                

                CFLAGS += -O2 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC -I/home/6410/video/jpeg/include
                
修改
                $(CC) $(CFLAGS) -ljpeg -o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo
                

                $(CC) $(CFLAGS) -ljpeg -L/home/6410/video/jpeg/lib -o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo

                4)
编译
                make
                5)
测试
                在开发板上mkdir /mjpeg
                拷贝*.so到开发板的mjpeg目录下,mjpg_streamer到开发板的bin下并改变权限

                打开开开发板运行
                mjpg_streamer -i "/mjpeg/input_uvc.so -d /dev/video2" -o "/mjpeg/output_http.so"
                
        用火狐浏览器打开一个网页输入下面地址就能够看到一个视频(开发板的IP为222.22.253.88)
                http://222.22.253.88:8080/?action=stream 

                打开一个网页输入下面地址就能够看到一个静态图片:
                http://222.22.253.88:8080/?action=snapshot 

    平台: xbox下的ubuntu10.10、交叉编译工具:arm-linux-gcc 4.3.3.开发板xc2440  内核linux.2.6.37.4.摄像头Z301P

               


在arm9 视频采集图像中我想到很多方案。在前面的一大推的努力没成功后,我在网上无线发现一个 开源的软件mjpg-streamer也可以采集图像。首先我下载一个SDL的库。apt-get install sdl.因为下面会用到这个。然后下载mjpg-streamer这个网上都有的,解压后,你会发现有三个目录。分别对应的是mjpeg-client,mjpg-streamer,uvc-streamer。首先我进入mjpeg-client中然后到bin目录你回发先下面一个是对应linux-i386。还有一个win32-upx,进入win32中会有一个viewer.exe,这个是在windows下直接可以运行的客户端。linux-i386的还没使用过。然后跳出进入mipg-streamer目录下。make编译下。如果没有错误的话会生成mjpg-streamer 和好多后缀名为so的文件。下面的工作就是打开开发板将生成mjpg-streamer复制的开发板的sbin目录下。然后会用到刚才所说的那些so文件的一部分input-cmoscamera.so input_uvc.so,output_http.so,output_file.so分别复制到lib目录下。如果摄像头驱动成功的话会生在dev目录下生成一个video文件的。这个驱动的支持只需配置下内核。选中那个z30xx选项。此时ifconfig看下ip、我的电脑和开发板连的同一个路由器。

我的开发板ip是192.168.1.10

然后输入命令mjpg-streamer -i “、lib/input_uvc.so” -o "/lib/output_http.so -w 192.168.1.10:8080"

 8080是对应端口号。然后提示

开源软件 mjpg-streamer的使用、 - 阳光男孩 - 阳光男孩的博客
此时证明已经连接成功!
双击viewer.exer客户端。然后输入ip 端口号。点击链接。
开源软件 mjpg-streamer的使用、 - 阳光男孩 - 阳光男孩的博客
然后在浏览器下测试。推荐使用火狐 谷歌浏览器。打开火狐浏览器输入//192.168.1.10:8080/?action=stream
 
开源软件 mjpg-streamer的使用、 - 阳光男孩 - 阳光男孩的博客
 更多的命令使用看下mjpg-streamer目下的start.sh文件。
前面把boa移植好了现在就来用web控制led
 
index:
<p align="center" class="STYLE4"> 控制灯1测试:</p>
<div align="center">
  <form id="form1" name="form1" method="get" action="/cgi-bin/leds.cgi">
    <p>
      <label>
        <input type="radio" name="type" value="1" />
        开灯      </label>
      <br />
      <label>
        <input type="radio" name="type" value="0" checked/>
        关灯</label>
   <br />
  <label>
        <input type="radio" name="type" value="10" />
        查看LED1状态      </label>
    </p>
    <p>
      <label>
      <input type="submit" name="Submit" value="OK!" />
      </label>
    </p>
  </form>
</div>
  <label>
</label>
 
 
leds.cgi:部分程序
 led_fd=open("/dev/tiny6410-led",O_RDWR);
      if(led_fd==-1)
         {
           perror("open tiny6410-led device failed\n");
           printf("open tiny6410-led device failed\n");
           exit(1);
          }
       else
          {
           //printf("open tiny6410-led device success!\n");                 
          }
     
     /*LED1*/
   if(fifo_value[0]==0)
      {
        if(ioctl(led_fd,1,00)==0)
           printf("CGI ioctl is ok\n");
        else
           printf("CGI ioctl is wrong\n");
        printf("my led1 off!\n");
      }
   
    if(fifo_value[0]==1)
       {
        if(ioctl(led_fd,1,01)==0)
           printf("CGI ioctl is ok\n");
        else
           printf("CGI ioctl is wrong\n");
        printf("my led1 on!\n");
       }
     if(fifo_value[0]==10)
       {
        ioctl(led_fd,0,&arg);
  _itoa(arg,s,2);
  //printf("s=%s\n",s);
  n=strlen(s);
  //printf("n=%d\n",n);
  //printf("s[0]=%c",s[0]);
  if(s[0]=='0')
            printf("led 1: ON\n");
  else if(s[0]=='1')
             printf("led 1: OFF\n");
       }
  效果图:
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CSDN IT狂飙上传的代码均可运行,功能ok的情况下才上传的,直接替换数据即可使用,小白也能轻松上手 【资源说明】 基于MATLAB实现的数字调制就是把数字基带信号的频谱搬移到高频处,形成适合在信道中传输的带通信号基本的数字调制方式有振幅键控(ASK)、频移键控(FSK)、绝对相移键控(PSK)、相对(差分)相移键控(DPSK)在接收端可以基于想干解调或非相干解调还原数字基带信号+使用说明文档 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2020b;若运行有误,根据提示GPT修改;若不会,私信博主(问题描述要详细); 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可后台私信博主; 4.1 期刊或参考文献复现 4.2 Matlab程序定制 4.3 科研合作 功率谱估计: 故障诊断分析: 雷达通信:雷达LFM、MIMO、成像、定位、干扰、检测、信号分析、脉冲压缩 滤波估计:SOC估计 目标定位:WSN定位、滤波跟踪、目标定位 生物电信号:肌电信号EMG、脑电信号EEG、心电信号ECG 通信系统:DOA估计、编码译码、变分模态分解、管道泄漏、滤波器、数字信号处理+传输+分析+去噪、数字信号调制、误码率、信号估计、DTMF、信号检测识别融合、LEACH协议、信号检测、水声通信 5、欢迎下载,沟通交流,互相学习,共同进步!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值