mjpg-streamer学习笔记1----mjpg-streamer移植

1、什么是mjpg-streamer

  MJPG-streamer是一款免费基于IP地址的视频流服务器,它的输入插件从摄像头读取视频数据,这个输入插件产生视频数据并将视频数据复制到内存中,它有多个输出插件将这些视频数据经过处理,其中最重要的输出插件网站服务器插件,它将视频数据传送到用户浏览器中,MJPG-streamer的工作就是将其中的一个输入插件和多个输出插件绑定在一起,所有的工作都是通过它的各个插件完成的。

各个文件如下:

    (1)input_testpicture.so。这是一个图像测试插件,它将预设好的图像编译成一个头文件,可以在没有摄像头的情况下传输图像,从而方便调试程序。

    (2)input_uvc.so。此文件调用USB摄像头驱动程序V4L2,从摄像头读取视频数据。

    (3)input_control.so。这个文件实现对摄像头转动的控制接口

    (4)output_http.so。这是一个功能齐全的网站服务器,它不仅可以从单一文件夹中处理文件,还可以执行一定的命令,它可以从输入插件中处理一幅图像,也可以将输入插件的视频文件根据现有M-JPEG标准以HTTP视频数据服务流形式输出。

(5)output_file.so。这个插件的功能是将输入插件的JPEG图像存储到特定的文件夹下,它可以用来抓取图像


2、如何将mjpg-streamer移植到开发板上

(1)  libjpeg 的移植(因为MJPG-streamer依赖于jpeg库)

解压libjpeg库

tar xzvf libjpeg-turbo-1.2.1.tar.gz

切换到libjpeg库目录下

cd libjpeg-turbo-1.2.1

建目录tmp

mkdir tmp

 ./configure --host=arm-linux --prefix=$(pwd)/_install的含义

$ ./configure 下面两个都是运行configure时给的参数

--host=arm-linux 运行环境 (交叉编译成arm)

--prefix=$(pwd)/_install 安装目录

pwd是当前用户目录。


进行配置,--prefix=是指定安装目录/work/nfs_root/libpeg-turbo-1.2.1/tmp,--host=arm-linux是指定运行环境是arm

./configure --prefix=/work/nfs_root/libjpeg-turbo-1.2.1/tmp --host=arm-linux

编译

make

安装

make install

/work/nfs_root/libjpeg-turbo-1.2.1/tmp/lib/目录下的动态库拷贝到/work/nfs_root/fs_mini_mdev_new/lib/目录下(-d表示原来是链接文件也作为链接文件拷贝过去)

cp /work/nfs_root/libjpeg-turbo-1.2.1/tmp/lib/*so* /work/nfs_root/fs_mini_mdev_new/lib/ -d


(2)  mjpg-streamer 的移植:

解压

tar xvf mjpg-streamer-r63.tar.gz

切换到mjpg-streamer-r63目录下

cd mjpg-streamer-r63


修改所有的Makefile 

arm-linux-gcc是交叉编译工具链,用于 编译出能在ARM平台上运行的程序,而gcc编译出来的程序在x86平台上运行 

--(1) 将 CC=gcc 修改为 CC=arm-linux-gcc 

--(2) 修改plugins/input_uvc/Makfile 

-O2是优化选项,-DLINUX -D_GNU_SOURCE-Wall表示打开所有需要注意的警告信息,-shared指定生成动态连接库,-fPIC 表示编译为位置独立的代码,

 -I/work/nfs_root/libjpeg-turbo-1.2.1/tmp/include 表示指定所需要的头文件

a. 将 
CFLAGS += -O2 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC 
改为 
CFLAGS += -O2 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC -I /work/nfs_root/libjpeg-turbo-1.2.1/tmp/include 
注意: 
-I /work/jz2440/libjpeg-turbo-1.2.1/tmp/include    //  是编译libjpeg 生成的文件 

 

o: 编译的目标文件
a: 静态库,其实就是把若干o文件打了个包
so: 动态链接库(共享库)
lo: 使用libtool编译出的目标文件,其实就是在o文件中添加了一些信息
la: 使用libtool编译出的库文件,其实是个文本文件,记录同名动态库和静态库的相关信息

$@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件。

-L.:表示要连接的库在当前目录中

-ltest:编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.so来确定库的名称,即libtest.so


b. 将 
input_uvc.so: $(OTHER_HEADERS) input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo 
                $(CC) $(CFLAGS) -ljpeg -o $@ input_uvc.c v4l2uvc.lo  
jpeg_utils.lo dynctrl.lo 
改为 
input_uvc.so: $(OTHER_HEADERS) input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo 
                $(CC) $(CFLAGS) -ljpeg -L /work/jz2440/libjpeg-turbo-1.2.1/tmp/lib -o 
$@ input_uvc.c
v4l2uvc.lo j peg_utils.lo dynctrl.lo
编译

make

 mjpg_streamer /work/nfs_root/fs_mini_mdev_new/bin/目录下的动态库文件拷贝到/work/nfs_root/fs_mini_mdev_new/lib/ 目录下

cp mjpg_streamer /work/nfs_root/fs_mini_mdev_new/bin/

cp *so* /work/nfs_root/fs_mini_mdev_new/lib/ -d

mjpg_streamer -i "input_uvc.so -f 10 -r 320*240" -o "output_http.so -w www"

3、命令参数

     这个是我设置的参数:输入UVC,网页输出,图片输出(更详细的设置,建议去看源码)

         mjpg_streamer -i "input_uvc.so -f 10 -r 320*240 -y" -o "output_http.so -c "ruoyun:liufeng" -w www -p 8888" -o "output_file.so -d 1000 -f /mnt "  

      -i 输入

       "input_uvc.so -f 10 -r 320*240 -y"

       input_uvc.so:UVC输入组件

     -f  10             :表示10帧

     -r 320*240     :分辨率

     -y                   :YUV格式输入(有卡顿),不加表示MJPG输入(需要摄像头支持)


      -o输出

          "output_http.so -c "ruoyun:liufeng" -w www -p 8888" 

          output_http.so          :网页输出组件

          -c "ruoyun:liufeng"       :用户名:ruoyun        密码:liufeng

          -w www                                  : 网页输出

         -p 8888                                   :端口   8888


         "output_file.so -d 1000 -f /mnt "   

          output_file.so                  :图片输出组件

          -d 1000                                   : 时间1S

          -f /mnt                                       :输出图片放在哪,我是开机直接把/mnu挂载到本地文件夹了

4、使用

在firefox浏览器里面输入 http://192.168.1.1:8080/?action=stream ,应该能看到摄像头抓取的视频

动态视频:192.168.1.1:8080/?action=stream                
静态图像:192.168.1.1:8080/?action=snapshot


  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值