当前位置: 代码迷 >> 综合 >> 第三阶段应用层——2.12 视频监控—mjpg-streamer源码分析(1)-框架
  详细解决方案

第三阶段应用层——2.12 视频监控—mjpg-streamer源码分析(1)-框架

热度:1   发布时间:2024-02-09 15:59:32.0

视频监控—mjpeg-streamer源码分析(1)-框架

  • 硬件平台:韦东山嵌入式Linxu开发板(S3C2440.v3)
  • 软件平台:运行于VMware Workstation 12 Player下UbuntuLTS16.04_x64 系统
  • 开发环境:arm-linux-gcc-4.3.2工具链、linux-3.4.2内核(开发版根文件系统)
  • 源码仓库:https://gitee.com/d_1254436976/Embedded-Linux-Phase-3

目录

  • 视频监控—mjpeg-streamer源码分析(1)-框架
    • 一、mjpg-streamer的简单介绍
    • 二、mjpg-streamer的框架
      • 1、`globals`结构体管理
      • 2、`in`输入插件
      • 3、`output`输出插件


一、mjpg-streamer的简单介绍

??mjpg-streamer是一款免费基于IP地址的视频流服务器,它的输入插件从摄像头读取视频数据,这个输入插件产生视频数据并将视频数据复制到内存中,它有多个输出插件将这些视频数据经过处理,其中最重要的输出插件是网站服务器插件,它将视频数据传送到用户浏览器中.

??mjpg-streamer的工作就是将其中的一个输入插件和多个输出插件绑定在一起,所有的工作都是通过它的各个插件完成的


二、mjpg-streamer的框架


1、globals结构体管理

通过分析得到下图:
在这里插入图片描述
可以知道,整个mjpg-streame是由_globals这个结构体进行管理的

struct _globals {int stop;/* signal fresh frames */pthread_mutex_t db;pthread_cond_t  db_update;/* global JPG frame, this is more or less the "database" */unsigned char *buf;int size;/* input plugin */input in;/* output plugin */output out[MAX_OUTPUT_PLUGINS];int outcnt;};

在这个结构体中,主要分为如下3部分:buf数据中转站,in输入插件、out输出插件


2、in输入插件

由_input 结构体进行管理

typedef struct _input input;
struct _input {char *plugin;void *handle;input_parameter param;int (*init)(input_parameter *);int (*stop)(void);int (*run)(void);int (*cmd)(in_cmd_type, int);
};

对于mjpg-streamer,其设置了如下三种的输入方式通过运行-i input_xxx.so指定具体的调用库
在这里插入图片描述
每个调用库的主要函数为xxx_inti、xxx_stop、xxx_run,其所做的事情如下:
其中xxx_run函数中,把数据存储到globals结构体的buf中,供输出插件来获取数据
在这里插入图片描述


3、output输出插件

_output结构体进行管理

typedef struct _output output;
struct _output {char *plugin;void *handle;output_parameter param;int (*init)(output_parameter *);int (*stop)(int);int (*run)(int);int (*cmd)(int, out_cmd_type, int);
};

对于mjpg-streamer,其设置了如下三种的输入方式通过运行-o output_xxx.so指定具体的调用库
在这里插入图片描述

每个调用库的主要函数为xxx_inti、xxx_stop、xxx_run,其所做的事情如下:
其中xxx_run函数中,程序会把在in输入插件中存储到globals结构体的buf中的数据取出
在这里插入图片描述