zoukankan      html  css  js  c++  java
  • mjpg-streamer视频服务器移植

    相关软件下载地址:http://pan.baidu.com/s/16yo8Y

    JPEG库的移植

    对于内核linux-2.6.35,不能再使用servfox,如果要使用的需要修改大量的代码。在此选用新的方法来移植,需要两个文件jpeg,mjpg-stream.移植如下:

    jpeg源码包通过下面这个网址下载

    http://www.ijg.org/files/jpegsrc.v8b.tar.gz

    1) 解压源码包

    tar  xvf  jpegsrc.v8b.tar.gz

    2) 配置源码

    cd  jpeg-8b

    ./configure --prefix=/home/linux/jpeg --host=arm-none-linux-gnueabi

    注:./configure  配置源代码树

    安装目录:

    --prefix=PREFIX

    体系无关文件的顶级安装目录PREFIX(自己的主机用户目录下 /home/XXX),也就Apache的安装目录。[/usr/local/apache2]

    系统类型:

    --host=HOST

    指定Apache HTTP服务器将要运行的目标系统类型HOST
    [BUILD]

    3)编译

    make

    4)安装

    make install

    5)拷贝库到文件系统中

    cp /home/linux/jpeg/lib/libjpeg.so.8  /source/rootfs/lib

    (上面一句我改成了  cp libjpeg.so* ~/nfs_share/rootfs/lib/ -d   )

    ④mjpg-stream的移植

    1)下载源码

    mjpg-stream源码包通过下面这个网址下载

    http://sourceforge.net/projects/mjpg-streamer/

    2)解压源码

    tar  xvf  mjpg-streamer-r63.tar.gz

    mkdir /home/linux/mjpg-streamer-r63

    3)修改源码

    cd  mjpg-streamer-r63

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

    CC=gcc

    修改为

    CC=arm-cortex_a8-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

    mkdir  /source/rootfs/mjpg

    cp *.so /source/rootfs/mjpg

    cp mjpg_streamer /source/rootfs/bin

    mjpg_streamer -i "/mjpg/input_uvc.so -y" -o "/mjpg/output_http.so -w 192.168.0.110:8080" &    (注意:这里是板子的ip 192.168.1.236)

    使用视频连接软件,进行连接,会看到摄像头采集到了清晰地景象!!!

    浏览器上执行:

    http://192.168.1.236:8080/?action=snapshot   (每次回车单张抓拍)

    或者

    http://192.168.1.236:8080/?action=stream

    ⑤拍照功能的实现

    由于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_com < 0)

    {

        perror (“open the file webcom error”);

    }

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

      if (flags == 0)

    {

        while(1)

     {

    read(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;

    flags = 0;

    }

    }

    else if (flags == 2)

    {

    stop_num = 0;

    flags = 0;

    }

     测试

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

    #echo one > tmp/webcom

    #ls /pice/可以看到图片信息

    注:拍照功能实现:

    mjpg_streamer -i "/mjpg/input_uvc.so -y" -o "/mjpg/output_http.so -w /www" -o "/mjpg/output_file.so -f /pice -d 15000" &

  • 相关阅读:
    Mac sublime text3 安装插件
    趣题记录
    Shadow DOM及自定义标签
    JavaScript 对象部署 Iterator 接口
    JavaScript实现循环链表
    使用JavaScript实现单向链表
    nodejs深入浅出读书笔记(三)
    nodejs深入浅出读书笔记(一)
    nodejs深入浅出读书笔记(二)
    为什么要了解Event loop?(二)
  • 原文地址:https://www.cnblogs.com/vsyf/p/4974534.html
Copyright © 2011-2022 走看看