远程视频监控之应用篇(mjpg-streamer)

转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/38515311

这篇文章将主要结合源码介绍mjpg-streamer,使小伙伴们了解视频监控的实现。

一.移植

tar xvf mjpg-streamer-r63.tar.gz

cd mjpg-streamer-r63

修改所有的Makefile

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

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

a. 将

CFLAGS += -O2 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC

改为

CFLAGS += -O2 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC -I /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include

注意:

-I /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include   //  是编译libjpeg 生成的文件

b. 将

input_uvc.so: $(OTHER_HEADERS) input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo

$(CC) $(CFLAGS) -ljpeg -o [email protected] 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 /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib -o [email protected] input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo

make

cp mjpg_streamer 靠别到开发板的/bin目录

cp *so* 拷贝到开发板的/lib

二.软件结构

软件MJPG-streamer采用模块化的设计方法,以功能块为单位进行描述,这些功能块被称为plug-in(组件)。软件中定义好了各组件的输入、输出,以及组件之间的衔接关系。用户可自行根据对功能的需求,选择需要的模块。这种模块化的程序设计简化了代码的编写、调试、维护,程序员只需要遵守设计的规范,就可以轻松地改写软件,或者编写新的模块以增强软件的功能。

input_uvc                  <-----------------------                                       ------------------------>         output_autofocus

input_file                   <--------------------          MJPG-streamer           -------------------->          output_file

input_testpicture      
<--------------------

input_gspcav            <-----------------------                                       ------------------------>          output_http

我们选择的组件是input_uvc (输入USB摄像头数据)和output_http(输出网页),output_file(输出图片)

三.初始化

从mjpg_streamer.c文件开始分析

1.输入初始化(input_init();)

global.in.init(&global.in.param)             //打开input_init()函数

input_init()                              //input_uvc.c

1.识别参数

2.调用init_videoIn()          //设置结构体,调用init_v4l2,分配缓冲区(存放摄像头数据)

init_v4l2()                 //根据设置的参数,做相应的操作,这里是真正调用驱动的地方

2.输出初始化(output_init();)

global.out[i].init(&global.out[i].param)                         //调用output_run();

output_init()                                                    //解析参数,相应变量赋值

四.运行

从mjpg_streamer.c文件开始分析

1.输入运行(input_run();)

global.in.run();                                    //调用input_run();

input_run()

pthread_create(&cam, 0, cam_thread, NULL);   //创建线程

void *cam_thread( void *arg )

uvcGrab(videoIn)                                //获得一帧数据

if (videoIn->formatIn == V4L2_PIX_FMT_YUYV) //如果YUV则压缩,否则直接拷贝buffer中

2.输出运行(output_run();)

global.out[i].run(global.out[i].param.id);        //调用output_run();

output_run(int id)

pthread_create(&(servers[id].threadID), NULL, server_thread, &(servers[id]));   //创建线程

void *server_thread( void *arg )

pthread_create(&client, NULL, &client_thread, pcfd)

void *client_thread( void *arg )                     //客户端连接服务

_readline(lcfd.fd, &iobuf, buffer, sizeof(buffer)-1, 5)

_read(fd, iobuf, &c, 1, timeout)

read(fd, &iobuf->buffer, IO_BUFFER))    //读取数据

send_stream(lcfd.fd);                                          //发送流

pthread_cond_wait(&pglobal->db_update, &pglobal->db);  //等待数据更新

memcpy(frame, pglobal->buf, frame_size);                         //从buf中取出数据

write(fd, frame, frame_size)                                                 //发出数据

五.命令参数

这个是我设置的参数:输入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挂载到本地文件夹了

时间: 2024-10-12 19:53:07

远程视频监控之应用篇(mjpg-streamer)的相关文章

远程视频监控之硬件篇

转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/38513927 主要对本项目所设计的硬件进行说明,为了以后的驱动打基础.总的框图在概述里面有说,这里就不再累述. 一.ARM9开发板(mini2440) 1.LED 2.按键 应用程序用的是按键4 3.PWM 4.串口 由于CON1是调试的串口,CON3是红外的串口.所以我们就用CON2. 二.GSM模块(sim900A) 对于SIM900A的介绍不就不说了,百度一下一坨.主要

远程视频监控之驱动篇(PWM)

转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/38515237 一.代码 #include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> #include <linux/init.h> #include <linux/delay.h> #include <linux/poll.h>

远程视频监控之驱动篇(摄像头)

转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/38515279 一.linux摄像头驱动框架 二.UVC介绍 UVC是USB video class的简称,图像产品在不需要安装任何的驱动程序下即插即用.我们通常所说的免驱摄像头. 免驱并不是说没有,而是大家硬件上都支持UVC这个规范,所以linux中有了一个通用的驱动.所以你再插上你的摄像头就不用下载驱动了,自动加载. 三.驱动分析 1.驱动的注册: 驱动在\drivers\

远程视频监控之驱动篇(串口)

转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/38638831 由于串口驱动略显复杂,且调试比较困难,我并没有进行重新改写,这里主要是分析一下三星的串口驱动.GSM是通过串口通信的,GSM模块的内容我将在应用篇中讲解.在阅读下面内容时我强烈建议你打开内核的驱动代码,而且为了方便建议你使用Source Insight进行阅读代码.驱动位置:\linux-3.4.91\drivers\tty\serial\samsung.c 由

远程视频监控之应用篇(环境搭建)

转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/38515423 这篇主要是讲远程视频监控的环境搭建,中间会设计到网络搭建,也会涉及到一些应用和库的移植. 一.配置内核 1.支持UVC(USB摄像头) make menuconfig <*> Multimedia support  ---> <*>   Video For Linux [*]   Video capture adapters (NEW)  -

远程视频监控之驱动篇(按键)

转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/38515211 这里我只贴出了代码和应用,没有进行其他的讲解.因为之前我写过的按键驱动的恩恩怨怨,讲解的非常清楚,这个驱动就是根据之前写的改写而成.连接:http://blog.csdn.net/ruoyunliufeng/article/details/23946487 一.代码 #include <linux/module.h> #include <linux/sc

远程视频监控之构思篇

转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/38462753 一.项目产生 这个项目的产生事实上是个意外,由于我原本假期是像做一个类似于手机的项目.可是后来苦于自己能力有限,无法在短期内作出UI.我在无意中产生了这个项目,实话实说这个mjpg-streamer在web视频监控上已经被别人用烂了,特别是一个老外移植以后,还被友善之臂收到官方文档,当做一个项目.大家几年前看着新颖都尝试这做,我最初一看确实没什么兴趣.网上一搜全

远程视频监控项目之概览

转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/38457827 这个项目是假期花费足足办个月才搞定的. 从今天开始我将从0开始介绍我的整个项目,其中包括从开始的构思.实施.再到执行.希望大家能从中有所收获,关于代码和文档,我还在整理,应该在写完这个项目之前能够全部整理完,到时候一并放出. 效果视频:http://v.youku.com/v_show/id_XNzUzMzA1MTg0.html 一.功能介绍 1.视频监控功能

用java写一个远程视频监控系统,实时监控(类似直播)我想用RPT协议,不知道怎么把RPT协议集成到项目中

我最近在用java写一个远程视频监控系统,实时监控(类似直播)我想用RPT协议,不知道怎么把RPT协议集成到项目中,第一次写项目,写过这类项目的多多提意见,哪方面的意见都行,有代码或者demo的求赏给我,谢谢