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

原创 2016年08月30日 20:35:31

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 jpeg_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


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【原创】IP摄像头技术纵览(五)---网络摄像头初试—mjpg-streamer移植与部署

【原创】IP摄像头技术纵览(五)—网络摄像头初试—mjpg-streamer移植与部署本文属于《IP摄像头技术纵览》系列文章之一:Author: chad Mail: linczone@163.c...

v4l2摄像头移植mjpg_streamer笔记

v4l2摄像头移植mjpg_streamer笔记 mjpg-stream的移植需要jpeg的库,所以我们先移植jpeg的库 (1)jpeg库的移植 1)jpeg源...

Mjpg-Streamer 拍照功能移植

原文地址:http://wenku.baidu.com/view/7105e6c15fbfc77da269b1f4 http://bbs.csdn.net/topics/350052487十三楼...

基于mjpg-streamer网络视频服务器移植

MJPG简介:   MJPG是MJPEG的缩写,但是MJPEG还可以表示文件格式扩展名.   MJPEG   全名为 "Motion Joint Photographic Experts Gro...

嵌入式移植mjpg-streamer成功

Mjpg‐streamer是一个开源软件,用于从webcam摄像头采集图像,把它们以流的形式通过基于ip的网络传输到浏览器如Firefox,Cambozola,VLC播放器,Windows的移动设备或...

mini2440开发板移植mjpg-streamer

转载自:http://hi.baidu.com/%D7%B7%C3%CE123654/blog/item/9c0473eb9270656f79f0555e.html,感谢作者咯!! Mjpg‐s...

详解移植mjpg_streamer到arm板

介绍: Mjpg‐streamer是一个开源软件,用于从webcam摄像头采集图像,把它们以流的形式通过基于ip的网络传输到浏览器如Firefox,Cambozola,VLC播放器,Windows...

【ARM-Linux开发】TI AM437x调试WEB CAM

Rico Board是基于TI AM437x的一款小型学习板,提供的丰富的接口以及资源,能够实现很多有趣的idea,从本周起,开始总共四期的实验教程,帮助玩家们快速上手Rico Board在嵌入式上面...

mjpg-streamer服务器移植

“MJPG-streamer”,是用户从webcam摄像头采集图像,并以流的形式通过基于IP的网络传输到浏览器图Firefox,Cambozola,VlC播放器,Windows的移动设备或者其他用户浏...

mjpg-streamer学习笔记2----框架分析

1、输入---仓库-----输出(mjpg-streamer.h) (1)global结构体 输入对应的是input结构体(输入插件) 仓库对应的是buf指针 输出对应的是output结构体(输出插件...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)