项目-基于视频压缩的实时监控系统--tiny6410

@国嵌linux学习笔记。

  1. 构造服务端结构体 server

struct server
{
    int epfd;            //保存epoll指针
    struct cam *cam;        //采集子系统
    struct tcp_srv *srv;    //传输子系统
    struct cfg *cfg;        //配置子系统
};struct server *srv_main;

  2.创建epoll,将返回值保存到srv_main->epfd;

    

  3.让子系统自己添加事件,并将子系统的结构体指针保存到 srv_main 中。

    3.1 添加采集子系统 cam_sys_init();

    构造采集子系统结构

/*图像信息数据*/
struct buf
{
    void *start;    //图像起始地址
    int len;        //图像长度
};

/*摄像头数据*/
struct v4l2_dev
{
    int fd;        //保存设备文件的指针
    __u8 name[32];        //设备名称
    __u8 drv[16];        //驱动名称
    struct buf *buf;
    struct event_ext *ev;
    struct cam *arg;
};

struct cam
{
    struct v4l2_dev *v4l2_dev;    //摄像头设备
    struct buf tran_frm;        //图像数据
    __u32 tran_frm_max_size;    //最大图像数据长度
};

      3.1.1初始化摄像头v4l2_init();

        3.1.1.1 打开设备文件        

v->fd = open("/dev/video2",O_RDWR|O_NONBLOCK);

        3.1.1.2获取驱动信息  

  ioctl( v->fd, VIDIOC_QUERYCAP, &cap);

    if( !(cap.capabilities & V4L2_CAP_VIDEO_CAPTURE) )
    {
        printf("this is not a video device\n");
        return -1;
    }
    strcpy((char *)v->name,(char *)cap.card);
    strcpy((char *)v->drv,(char *)cap.driver);

        3.1.1.3设置图像格式 

     fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
	fmt.fmt.pix.width = 320;
	fmt.fmt.pix.height = 240;
	fmt.fmt.pix.field = V4L2_FIELD_INTERLACED;
	fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_MJPEG;
	ioctl( v->fd, VIDIOC_S_FMT, &fmt );

        3.1.1.4申请图像缓存区  

     req.count = 4;
	req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
	req.memory = V4L2_MEMORY_MMAP;
	ioctl( v->fd, VIDIOC_REQBUFS, &req );

        3.1.1.5把内核空间映射到用户空间

     v->buf = calloc( 4, sizeof(struct buf) );
	for( i=0; i<req.count; i++ )
	{
		buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
		buf.memory = V4L2_MEMORY_MMAP;
		buf.index = i;

		ioctl( v->fd, VIDIOC_QUERYBUF, &buf );

		v->buf[i].len = buf.length;

		v->buf[i].start = mmap( NULL, buf.length, PROT_READ | PROT_WRITE, MAP_SHARED, v->fd,buf.m.offset);
	}

      3.1.1.6图像缓存入队

     for( i=0; i<4; i++ )
	{
		buf.type	=	V4L2_BUF_TYPE_VIDEO_CAPTURE;
		buf.memory	=	V4L2_MEMORY_MMAP;
		buf.index	=	i;
		ioctl( v->fd, VIDIOC_QBUF, &buf );
	}

  

      3.1.2将采集子系统的事件加入到epoll池

      v4l2_start_capture( cam->v4l2_dev );  

   

    3.2添加传输子系统net_sys_init();

          

  4.等待事件发生且处理。

    

时间: 2024-08-09 10:24:23

项目-基于视频压缩的实时监控系统--tiny6410的相关文章

阶段4-独挡一面\项目-基于视频压缩的实时监控系统\Sprint3-采集端传输子系统设计

在上面一个迭代中,通过图像采集模块采集到图像送到主程序中,进行编码,由于我们采集的图像就是jpeg格式的,其实它本来就是编码压缩后的格式,所以没有必要重复编码,故省掉该步骤:下面就是网络传输子系统部分,目的就是把采集到的图像通过网络传输到远端的客户的播放器里面进行相应的解码和播放. 1.设计工作流程 a.初始化包括:1)tcp的socket初始化:2)将事件注册到epoll当中: b.对事件进行处理,包括当socket收到网络包的时候,需要进行处理:以及当socket发送完网络包之后需要处理.

基于视频压缩的实时监控系统

采集端主要框架: 主程序.图像采集子系统.传输子系统.图像编码压缩子系统 监控端主要框架: 主程序.传输子系统.图像解码子系统.图像显示子系统 针对采集端来说: 主程序工作流程:(采用epoll架构) 1.利用epoll_create函数创建epoll  2.将加入等待事件的工作下放到传输子系统和采集子系统中  3.等待事件发生且处理epoll_wait 图像采集子系统工作流程:(使用了V2L4编程模型使摄像头采集图像)1.V2L4初始化  2. 采集图像 传输子系统工作流程:(利用socket

项目三. 基于图像压缩的视频监控系统

项目三. 基于图像压缩的视频监控系统 Sprint0-产品设计与规划 基于图像压缩的视频监控系统 1. 产品功能演示 在linux系统上运行程序,弹出登录界面,输入地址.端口信息,弹出视频监控界面,实时传出视频信息. 2. 功能模块分析 采集端: 图像采集子系统 图像编码子系统 传输子系统 主程序 监控端: 传输子系统 图像编码子系统 传输子系统 主程序 Sprint1-基于Epoll架构的采集端程序框架设计 第1课-Epoll机制精通 大纲: v  为什么用Epoll? 阻塞型IO与多路复用

lite-monitor 一款基于shell命令的监控系统

介绍 lite-monitor 一款基于shell命令的监控系统,可以根据项目中输出的日志定时输出或者统计输出,并发送钉钉机器人报警消息. lite-monitor能做什么: 定时监控某个服务进程是否还存在,不存在则钉钉告警. 定时统计近一段时间内具体日志文件中关键字出现的次数,并对次数做一个阈值比较,超出阈值则钉钉告警并输出日志. 进阶监控(qps/计算效率等)可以根据awk等命令自定义实现. lite-monitor的特点: 每个监控可配置不同钉钉群机器人,可配置@具体人或者@all 对已有

[经验交流] 试用基于 influxdb+kapacitor 的监控系统

两个月前试用了基于 elasticsearch + xpack (watch) 的监控系统,发现了一个问题:elasticsearch 作为时序数据库使用时性能较差,在我目前的硬件配置下(es 主机内存 8G),使用 grafana 展示两个月以上的数据时,在读取数据的过程中出现明显卡顿,es 的资源占用率几乎到100%.因此,我又试用了 基于 influxdb+kapacitor 的监控系统. 1. 数据搜索性能 初步印象:搜索大量时序数据时 influxdb 的性能强于 es.可能是 es和

基于Storm的Nginx log实时监控系统

背景 UAE(UC App Engine)是一个UC内部的PaaS平台,总体架构有点类似CloudFoundry,包括: 快速部署:支持Node.js.Play!.PHP等框架 信息透明:运维过程.系统状态.业务状况 灰度试错:IP灰度.地域灰度 基础服务:key-value存储.MySQL高可用.图片平台等 这里它不是主角,不作详细介绍. 有数百个Web应用运行在UAE上,所有的请求都会经过UAE的路由,每天的Nginx access log大小是TB级,如何实时监控每个业务的访问趋势.广告数

基于邮件系统的远程实时监控系统的实现 Python版

人生苦短,我用Python~ 界内的Python宣传标语,对Python而言,这是种标榜,实际上,Python确实是当下最好用的开发语言之一. 在相继学习了C++/C#/Java之后,接触Python,最一开始突然一片茫然,似乎是进入了新世界,所有C家族的语法,在这里都或多或少地发生了改变,方法没有大括号,喜闻乐见的格式.定义变量不需要声明,时间长了,竟爱上了这个简介明了,高效快捷的语言,当然,也是当下开发语言界内的宠儿,不可否认,Python是当下最流行的开发语言了. [前言] 本文拟使用Py

Ntopng 网络流量实时监控系统搭建

下面实现Ntopng的rpm包安装 关于使用源码包也很简单,主要是Centos要提前配置EPEL-RELEASE方便依赖包安装, 在编译源码包就OK Ntopng介绍: Ntopng是原ntop下一代版本,网络流量实时监控显示.Ntopng类似于RMON远端网络监控代理,具有内置的Web服务能力,使用redis键值服务按时间序列存储统计信息.你可以在任何指定的监控服务器上安装ntopng,只需使用任一web浏览器,就能实时访问服务器上的流量报告了. ntopng用户可以使用一个网页浏览器浏览的N

大众点评实时监控系统CAT的那些坑

首先,感谢大众点评开源监控系统CAT.CAT是一款非常使用的功能建全的监控系统.作为一个知名的开源软件,真的是太差了. 想把CAT用起来,没有多年的Java经验是不行的.先吐槽一下,再写一篇如何用的文章. 从 https://github.com/dianping/cat 开始,就会碰到种种"坑". 第一坑,https://github.com/dianping/cat 上显示持续集成是失败的.(因为build的使用要用aliyun 的 maven 源才行.) 尝试用master编译成