zoukankan      html  css  js  c++  java
  • arm开发板6410/2440上mjpg-streamer网络视频服务器移植

     摄像头移植

    一、环境

    主机环境 :ubuntu 10.10         目标板 :FS-S5PC100

     主机工具链 :gcc-4.4.5         交叉工具链 :arm-unknown-linux-gnueabi-gcc

      摄像头 :ZC301

    注意事项:

    自己制作文件系时,需要将交叉编译工具链中的库文件拷贝到文件系统中。

    2  调试时使用nfs挂载,调试完成后,将zImage和yaffs文件系统(yaffs可读写)烧入开发板。

    二、移植过程

    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

    3、mjpg-streamer的移植

    关于mjpg-streamer的资料可以在下面这个网址查看:http://sourceforge.net/apps/mediawiki/mjpg-streamer/index.php?title=Main_Page

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

    (1)jpeg库的移植

     1)jpeg源码包通过下面这个网址下载          http://download.csdn.net/detail/colwer/4531343 

     2)解压源码包在/home/linux/ 目录下解压:            tar xvf jpegsrc.v8b.tar.gz

     3)配置源码,在/home/linux/目录下创建jpeg目录mkdir jpeg

                    cd  jpeg-8b

               执行    ./configure  --prefix=/home/linux/jpeg  --host=arm-unknwn-linux-gnueabi

      4)编译               make

      5)安装               make install

      6)拷贝库到文件系统中        cp  /home/linux/jpeg/lib/libjpeg.so.8   /source/rootfs/lib

    (2)mjpg-streamer的移植

             1)mjpg-stream源码包通过下面这个网址下载  http://download.csdn.net/detail/colwer/4531434        

             2)解压源码                tar xvf mjpg-streamer-r63.tar.gz

             3)修改源码                cd mjpg-streamer-r63

                    修改顶层makefile及plugins目录中的各级makefile,将所有

                    CC=gcc

                    修改为               CC=arm-unknown-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/jpeg/include

                    修改

                    $(CC) $(CFLAGS) -ljpeg -o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo

                    为

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

           4)编译                make

           5)将mjpeg可执行文件拷贝到文件系统的/bin目录下   cp mjpg-streamer  /source/rootfs/bin

    在文件系统中创建mjpg目录,将所有的动态库拷贝到该目录下

                  mkdir /source/rootfs/mjpg

                    cp *.so /source/rootfs/mjpg  {6so文件}

    将mjpeg_streamer-r63目录下的/www目录拷贝到文件系统中

    cp  /www/ -a   /source/rootfs/  -rf

    4 运行

    在WINDOWS下 运行viewer.exe或运行解压文件中的www目录下的所有文件复制到你当前的BOA服务器指定的目录下。

    同时要将www目录下的cambozla.jar bodybg.gif ,favicon.ico,  favicon.png,  sidebarbg.gif拷贝到你的BOA服务器下。

    打开开开发板将boa服务器运行起来

        ./etc/boa/boa &

    输入下面一行命令:

    ./bin/mjpg_streamer  -i  "/mjpg/input_uvc.so -d /dev/video0"  -o  "/mjpg/output_http.so -w  /www/  "

     在linux系统的浏览器中,输入如下地址:  

     http://192.168.1.200:8080

    显示界面如下图所示:

               

     

     

    5 拍照功能的实现

    由于mjpg_stream中output-file.so能实现连续拍照的功能,不能实现单拍或连拍几张的功能所以需要对output_file原码进行修改。

    #  cd mjpg-streamer-rc63/plugins/output_file

    #  vim output_file.c

    在96行 函数 void *worker_thread(void *arg) 体中加入以下代码:

    char buf[10];   //

    int flags = 0;   //拍照标志,1:表示11张照片,2:表示1张照片

    int fd_com = 0; //打开管道的文件描述符

     

       stop_num = 0; //拍照计数

      if ( access(“/tmp/webcom”,F_OK) < 0 )    //创建有名管道用于接收拍照命令

    {

       if ( mkfifo(“/tmp/webcom”,0666 ) < 0)

       {

    Printf(“ photo fifo create failed ”);

    }

    }

      fd_com = open (“/tmp/webcom”,O_RDONLY,0666);

      if (fd < 0)

    {

    perror (“open the file webcom error”);

    }

     

    在while( ok >= 0 && !pglobal->stop){ 后加入

      if (flags == 0)

    {

    while(1)

     {

    reade(fd_com,buf,sizeof(buf));

    if (strncmp(buf,”danger”,6) == 0)    //拍11张照片

    {

    flags = 1;

        bzero(buf,sizeof(buf));

        break;

    }

    if (strncmp(buf,”one”,3) == 0)   //1张照片

    {

    flags = 2;

        bzero(buf,sizeof(buf));

        break;

    }

     

    }

    }

     

    if (delay > 0){

       usleep(1000*delay);

    }后加入

    stop_num++

    if (flags == 1)        //判断拍照的数量

    {

    if  ( stop_num > 9)

       {

    stop_num = 0;

    flsgs = 0;

    }

    }

    else if (flags == 2)

    {

    stop_num = 0;

    flags = 0;

    }

    所以只要向有名管道/tmp/webcom写入danger就能连拍11张照片,写入one就拍一张照片。

     

    :拍照功能实现:

    ./bin/mjpg_streamer  –i  “/mjpeg/input_uvc.so  –d  /dev/video0” -o “/mjpeg/output_file.so   –f  /pice  -d  15000 ”  &  echo  danger  >  /dev/video0 

  • 相关阅读:
    0909 谈谈我对操作系统的理解
    实验四 主存空间的分配和回收模拟
    12.03进程调度实验点评
    实验三进程调度实验
    实验二 作业调度模拟程序编写
    实验一 DOS命令解释程序的编写
    0909 随笔第一季
    实验四 主存空间的分配和回收模拟
    实验三 进程调度模拟实验
    实验二 作业调度模拟实验
  • 原文地址:https://www.cnblogs.com/alan666/p/8312305.html
Copyright © 2011-2022 走看看