s3c2440 ARM9 移植mjpg-streamer

s3c2440 ARM9 移植mjpg-streamer

文章内容:

  1. mjpg-stream介绍
  2. 硬件环境
  3. 移植过程
    1. Linux3.0内核配置
    2. libjpeg库移植
    3. mjpg-stream移植
  4. 测试及调试

一、mjpg-stream介绍
  MJPEG 全名为 “Motion Joint Photographic Experts Group”,是一种视频编码格式,
  Motion JPEG技术常用与闭合电路的电视摄像机的模拟视频信号“翻译”成视频流,并存储在硬盘上。典型的应用如数字视频记录器等。
  mjpg‐streamer是一个开源软件,用于从webcam摄像头采集图像,把它们以流的形式通过基于ip的网络传输到浏览器如Firefox,Cambozola,VLC播放器,Windows的移动设备或者其他拥有浏览器的移动设备.mjpg-streamer 可以通过文件或者是HTTP方式访问linux UVC兼容摄像头。

二、硬件环境
主机环境:ubuntu14.04
目标机:FL2440开发板
主机工具链:gcc-4.6
交叉工具链:/opt/xtools/arm920t/bin/arm-linux-gcc

三、移植过程

  1. Linux3.0内核配置
    1、配置内核是内核支持UVC格式的摄像头 (其实默认支持UVC,它是标准协议),最后一步时根据自己需要进行选择摄像头配置。

    cd linux-3.0

    make menuconfig

    Device Drivers  --->
    
           <*> Multimedia support  --->
    
                     [*]   Video capture adapters  --->
    
                            [*]   V4L USB devices  ---> 
                                     <*>   USB Video Class (UVC)
    
                                      [*]     UVC input events device support
    

    2、重新编译arm板内核,烧入到开发板,启动后将USB摄像头插进开发板,串口右信息自动弹出,即识别成功。

    make -j2

    ~ >: usb 1-1.1: new full speed USB device number 3 using s3c2410-ohci
    uvcvideo: Found UVC 1.00 device USB 2.0 PC Cam (090c:71b3)
    input: USB 2.0 PC Cam as /devices/platform/s3c2410-ohci/usb1/1-1/1-1.1/1-1.1:1.0/input/input0
    
  2. jpeg库移植
    mjpg-stream的移植需要jpeg的库,所以我们先移植jpeg的库 ,即需要libjpeg.
    (1)jpeg源码包下载

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

    (2)解压源码包

    tar xvf jpegsrc.v8b.tar.gz

    (3)配置源码、编译并安装

    cd jpeg-8b
    ./configure --prefix=/usr/local/src/out_jpeg -host=arm-linux
    ./configure CC=/opt/xtools/arm920t/bin/arm-linux-gcc --prefix=/usr/local/src/out_jpeg -host=arm-linux
    make && make install

    (4)安装完成后,上面配置的/usr/local/src/out_jpeg 文件夹中便出现了bin、include、lib、share。其中include、lib便是mjpg-stream需要的。

    (5)拷贝上述文件夹lib,即jpeg库到根文件系统中。

    cp -ri /usr/local/src/out_jpeg/lib/* …/rootfs/lib

  3. mjpg-stream移植
    (1)下载最新板mjpg-streamer源码至/usr/local/src/。

    cd /usr/local/src/
    svn checkout https://svn.code.sf.net/p/mjpg-streamer/code/ mjpg-streamer-code

    文件夹包含
    doc
    mjpg-streamer —>提供执行程序和哥哥输入输出设备组件
    udp_client
    mjpeg-client —>分别有 linux和windows 的客户端
    mjpg-streamer-experimental
    uvc-streamer —>提供了 uvc-streamer的可执行目录

    (2)进入目录mjpg-streamer并修改源码
    1、修改源码 顶层的Makefile及plugins文件夹里面所有子层的Makefile中的CC参数为arm-linux-gcc,即将所有“CC = gcc”改为“CC = /opt/xtools/arm920t/bin/arm-linux-gcc”
    2、进入/plugins/input_uvc/Makfile

    修改
    CFLAGS += -O1 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC


    CFLAGS += -O1 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC -I /usr/local/src/out _jpeg/include

    修改
    (CC)(CFLAGS) -o @inputuvc.c v4l2uvc.lo jpegutils.lo dynctrl.lo ($LFLAGS)


    (CC)(CFLAGS) -L /usr/local/src/out_jpeg/lib -o @inputuvc.c v4l2uvc.lo jpegutils.lo dynctrl.lo ($LFLAGS)
    (注:/usr/local/src/out_jpeg/lib 就是上面移植jpeg库后安装的目录,根据自己设置的目录来修改)

    3、编译make,在mjpg-stream目录下生成了 input*.so、 output*.so 和 mjpg_streamer 可执行文件
    4、在开发板挂载的ubuntu文件系统目录中(本人为…/rootfs)建立mjpg-streamer安装目录,再将源码目录mjpg-stream整个拷贝到/root/rootfs/rootfs/mjpg-streamer目录下,然后就可以测试啦

    mkdir /…/rootfs/mjpg-streamer
    cp -ri mjpg-stream/* /root/rootfs/rootfs/mjpg-streamer

四、测试及调试
启动arm板,板子应设置好环境变量,让arm板通过tftp下载内核和挂载好ubuntu中的自制作文件系统。

启动后,插进USB摄像头,进入板子的mjpg-streamer 目录,

执行 ./start.sh;
若没有出现错误,则在PC机打开一个网页,输入http://(ip):8080/?action=stream就可以看到图像。 (ip为arm板的ip)

若出现下面错误:
Unable to set format: Invalid argument
Init v4L2 failed !! exit fatal
i: init_VideoIn failed

错误原因:
市面上大部分摄像头都是支持YUV的,而不是JPEG的。mjpg-stream支持JPEG和YUV两种格式。

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;

    
    if(pthread_mutex_init(&cams[id].controls_mutex, NULL) != 0) {
        IPRINT("could not initialize mutex variable\n");
        exit(EXIT_FAILURE);
    }
    ...........
}

将上面第4行中
format = V4L2_PIX_FMT_MJPEG
改为:
format = V4L2_PIX_FMT_YUYV

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值