项目-基于视频压缩的实时监控系统--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[]; //设备名称
__u8 drv[]; //驱动名称
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 -;
}
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.1.3事件处理函数void cam_Handler( int fd, void *arg )

      将图像的首地址赋值给

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

struct tcp_srv
{
 int sock;
};

struct tcp_cli
{
 int sock;
 char *buf;
 int len;
 struct sockaddr_in addr;
 struct event_ext *ev_rx;
 struct event_ext *ev_tx;

unsigned char req[FRAME_MAX_SZ];
 unsigned char rsp[FRAME_MAX_SZ+VID_FRAME_MAX_SZ];
};

  

   

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

    

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

  1. 阶段4-独挡一面\项目-基于视频压缩的实时监控系统\Sprint1-基于Epoll架构的采集端程序框架设计\第2课-基于Epoll的采集端程序框架设计

    回顾之前的整个程序架构 把epoll机制应用到这个架构上去 下面主要去分析我们的系统中有没有需要等待的事件,先看看采集子系统 在采集子系统当中,摄像头有数据,摄像头采集到图像数据可以作为一个等待事件. ...

  2. \阶段4-独挡一面\项目-基于视频压缩的实时监控系统\Sprint2-采集端图像采集子系统设计

    1.在编写程序前有一个流程,思维导图: 初始化:包括初始化摄像头:注册事件到epoll 然后是开始启动采集:一旦开始采集我们的摄像头就会有数据了,它会触发事件处理函数:我们在这里的处理是保存这个图像: ...

  3. 基于视频压缩的实时监控系统-sprint1基于epoll架构的采集端程序设计

    part1:产品功能 part2:epoll机制   select与epoll区别 1.select与epoll没有太大的区别.除了select有文件描述符限制(1024个),select每次调用都需 ...

  4. 基于视频压缩的实时监控系统-sprint2采集端图像采集子系统设计

    (1).初始化:a.初始化摄像头:b.注册事件到epoll (2).开始采集--->触发事件处理系统 (3).保存图像(方便测试) a.初始化摄像头 //初始化摄像头 1.获取驱动信息 2.设置 ...

  5. 基于视频压缩的实时监控系统-sprint3采集端传输子系统设计

    由于jpg本来就是编码压缩后的格式,所有无需重复编码 传输子系统步骤:(1)初始化:a.socket(初始化tcp连接):b.将事件添加到epoll中 (2)事件处理:接收到网络包.发送完网络包 st ...

  6. 转: 透过CAT,来看分布式实时监控系统的设计与实现

    评注: 开源的分布式监控系统 转:http://www.infoq.com/cn/articles/distributed-real-time-monitoring-and-control-syste ...

  7. 透过CAT,来看分布式实时监控系统的设计与实现

    2011年底,我加入大众点评网,出于很偶然的机会,决定开发CAT,为各个业务线打造分布式实时监控系统,CAT的核心概念源自eBay闭源系统CAL----eBay的几大法宝之一. 在当今互联网时代,业务 ...

  8. 嵌入式应用开发第四阶段-基于rk3399的视频监控系统

    一.需求分析 伴随着嵌入式技术.图像处理技术和无线网络传输技术的发展,传统模拟视频监控系统和基于PC的远程视频监控系统由于自身的不足,已经无法满足现代社会应用中不断涌现出来的新需求,于是基于嵌入式技术 ...

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

    介绍 lite-monitor 一款基于shell命令的监控系统,可以根据项目中输出的日志定时输出或者统计输出,并发送钉钉机器人报警消息. lite-monitor能做什么: 定时监控某个服务进程是否 ...

随机推荐

  1. SharePoint 2013 操作文档库ECB菜单

    在SharePoint的使用中,我们经常需要定制SharePoint的一系列菜单,这里就包括ECB菜单,下面,我们简单了解一下ECB菜单如何定制,以及原理. 1.正常情况文档库的ECB菜单如下图: 2 ...

  2. Excel数据导入到Sharepoint List

    这个功能是从XML中读取需要导入到Sharepoint List的列名字,然后把Excel中对应的数据导入到Sharepoint List中.基本原理,把Excel中数据临时放到Datatable中, ...

  3. SqlIte数据库并发性

    把遇到的一些小问题都记下来,告诉自己,一些小细节会铸成打错的 今天没事复习以前的知识,用sqlite做数据库,发现修改数据的时候等好久才有反应,而且还失败,可是过一会之后又会好,好了以后又是一样,种以 ...

  4. eclipse maven 插件 安装 和 配置

    eclipse 安装插件的方式最常见的有两种: 离线安装,用 link 的方式来安装,这种方式可拔性更好,可以随时将插件插上和拔下,非常方便.  link 离线安装 eclipse maven 插件 ...

  5. java验证码组件kaptcha使用方法

    使用方法: 项目中导入kaptcha-2.3.jar包在web.xml里面新增: <!-- 登陆验证码Kaptcha -->    <servlet>        <s ...

  6. jar 命令 打包装class文件的文件夹

    由于将spring源代码导入到eclipse后,缺少jar包,     所以从maven仓库中下载spring发布的spring-core  jar包. 为了方便理解目录结构,使用tree命令: tr ...

  7. MetaWeblog API调用

    http://rpc.cnblogs.com/metaweblog/webenh 在网上闲逛,突然对博客的接口感兴趣,经考察,多数博客都对metaWeblog Api 提供了支持,虽然windows ...

  8. SVN导出/导入、SVN备份/还原 【小白版】

    一.导出: 1.进入svn安装路径bin文件夹下,使用 cd 命令. 在windows下,win+R 键入 cmd 回车 打开命令窗口cmd,进入下列目录(svn服务器安装目录bin): " ...

  9. 自动化部署教程(一) redhat安装jenkins

    自动化部署教程(一)  redhat安装jenkins 源配置: sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.or ...

  10. CSS之旅——第二站 如何更深入的理解各种选择器

    上篇我们说了为什么要使用css,这篇我们就从选择器说起,大家都知道浏览器会把远端过来的html解析成dom模型,有了dom模型,html就变成 了xml格式,否则的话就是一堆“杂乱无章”的string ...