项目-基于视频压缩的实时监控系统--tiny6410
项目-基于视频压缩的实时监控系统--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的更多相关文章
- 阶段4-独挡一面\项目-基于视频压缩的实时监控系统\Sprint1-基于Epoll架构的采集端程序框架设计\第2课-基于Epoll的采集端程序框架设计
回顾之前的整个程序架构 把epoll机制应用到这个架构上去 下面主要去分析我们的系统中有没有需要等待的事件,先看看采集子系统 在采集子系统当中,摄像头有数据,摄像头采集到图像数据可以作为一个等待事件. ...
- \阶段4-独挡一面\项目-基于视频压缩的实时监控系统\Sprint2-采集端图像采集子系统设计
1.在编写程序前有一个流程,思维导图: 初始化:包括初始化摄像头:注册事件到epoll 然后是开始启动采集:一旦开始采集我们的摄像头就会有数据了,它会触发事件处理函数:我们在这里的处理是保存这个图像: ...
- 基于视频压缩的实时监控系统-sprint1基于epoll架构的采集端程序设计
part1:产品功能 part2:epoll机制 select与epoll区别 1.select与epoll没有太大的区别.除了select有文件描述符限制(1024个),select每次调用都需 ...
- 基于视频压缩的实时监控系统-sprint2采集端图像采集子系统设计
(1).初始化:a.初始化摄像头:b.注册事件到epoll (2).开始采集--->触发事件处理系统 (3).保存图像(方便测试) a.初始化摄像头 //初始化摄像头 1.获取驱动信息 2.设置 ...
- 基于视频压缩的实时监控系统-sprint3采集端传输子系统设计
由于jpg本来就是编码压缩后的格式,所有无需重复编码 传输子系统步骤:(1)初始化:a.socket(初始化tcp连接):b.将事件添加到epoll中 (2)事件处理:接收到网络包.发送完网络包 st ...
- 转: 透过CAT,来看分布式实时监控系统的设计与实现
评注: 开源的分布式监控系统 转:http://www.infoq.com/cn/articles/distributed-real-time-monitoring-and-control-syste ...
- 透过CAT,来看分布式实时监控系统的设计与实现
2011年底,我加入大众点评网,出于很偶然的机会,决定开发CAT,为各个业务线打造分布式实时监控系统,CAT的核心概念源自eBay闭源系统CAL----eBay的几大法宝之一. 在当今互联网时代,业务 ...
- 嵌入式应用开发第四阶段-基于rk3399的视频监控系统
一.需求分析 伴随着嵌入式技术.图像处理技术和无线网络传输技术的发展,传统模拟视频监控系统和基于PC的远程视频监控系统由于自身的不足,已经无法满足现代社会应用中不断涌现出来的新需求,于是基于嵌入式技术 ...
- lite-monitor 一款基于shell命令的监控系统
介绍 lite-monitor 一款基于shell命令的监控系统,可以根据项目中输出的日志定时输出或者统计输出,并发送钉钉机器人报警消息. lite-monitor能做什么: 定时监控某个服务进程是否 ...
随机推荐
- CXF:通过WebService上传文件,包括大文件的处理
参考网上文章,用CXF发布上传文件接口,并上传大文件的测试. 框架:spring3.1+cxf2.7.6 1.定义文件类实体 import javax.activation.DataHandler; ...
- Sql Server 2008 数据库附加失败提示9004错误解决办法
附加数据库 对于 服务器“WSS_Content”失败. (Microsoft.SqlServer.Smo)执行 Transact-SQL 语句或批处理时发生了异常. (Microsoft.SqlS ...
- html前端总结
1.设置图片的最大宽高的css<style> .img-max { max-height:50px; width:expression(document.body.clientHeight ...
- Phonegap之ios对iPhone6和Plus的闪屏适配 -- xmTan
故事的发生起于,由于老板强烈要求app在iPhone6和5有一样的工具栏,然后前端妹子用@media为iPhone6和Plus做了样式适配.然后问题来了,竟然奇葩的发现@media样式只对iPhone ...
- ios8版本地图定位注意点
学习ios地图定位 我先定义一个属性: @property (weak, nonatomic) IBOutlet MKMapView *mapV; 然后在项目运行时初始化该属性一些参数: //设置地图 ...
- App开发流程之使用分类(Category)和忽略编译警告(Warning)
Category使得开发过程中,减少了继承的使用,避免子类层级的膨胀.合理使用,可以在不侵入原类代码的基础上,写出漂亮的扩展内容.我更习惯称之为"分类". Category和Ext ...
- EditText显示明文与密码
布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=& ...
- Virtualbox虚拟机安装CentOS6.5图文详细教程
什么是Virtualbox? VirtualBox 是一款开源虚拟机软件(注:跟vmware差不多).VirtualBox 是由德国 Innotek 公司开发,由Sun Microsystems公司出 ...
- VBA 操作数字
第8章 操作数字 加.减.乘.除.平方与指数(^2 或者^n).平方根Sqr.正弦Sin.余弦Cos.正切Tan.反正切Atn.绝对值Abs 转换为整型数.长整型数.双精度型数和值 Cint当双精度型 ...
- Amoeba for MySQL---分布式数据库Proxy解决方案
Amoeba是什么? Amoeba(变形虫)项目,致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的时候充当SQL路由功能,专注于分布式数据库代理层(Database Proxy ...