3-1. 基于epoll架构的视频采集端设计
精通epoll架构
epoll:Linux中最优秀的多路复用机制!
与select 、poll区别
1.select和poll没有太大区别,除了select有文件描述符限制(1024个)。select每次调用都需要将fd集合拷贝到内核态,且监听过程遍历所有的文件位置,开销很大。
2.Epoll监测无上限,在注册新事件时就会一次性把所有fd拷贝到内核,无序遍历即可查询到监听位置,提高效率。
优势:1)多路复用; 2)阻塞IO; 3)无需遍历所有文件即可知道错误的文件位置(高效) 4)监控文件无上限
多路复用:一个进程同时监控多个文件或设备;
阻塞IO :进程执行过程中,无命令处理时进程休眠,有命令待处理时,唤醒进程处理命令;(避免在无命令时进程忙等占用CPU,高效)
epoll支持管道FIFO、套接字socket、POSIX消息队列、终端等,但不支持普通文件。epoll分成如下三个环节:
| 创建epoll监听池 | epfd = epoll_create(50) 返回epfd指向创建的监听池 |
| 添加epoll监听事件 |
epoll_ctl(epfd, EPOLL_CTL_ADD, fd, &event) 监听池epfd 操作符 要监听文件的fd 监听结构类型 |
| 等待监听事件发生 | n = epoll_wait(epfd, events, 100, -1) 返回事件发生个数 |
int main()
{
int fd1,fd2,efd;
struct epoll_event event;
struct epoll_event *events;
// 创建FIFO
mkfifo("/tmp/fifo1",); //要创建的FIFO文件的名字(含路径)
mkfifo("/tmp/fifo2",);
fd1=open("/tmp/fifo1",O_RDONLY); //打开管道文件监听
fd2=open("/tmp/fifo2",O_RDONLY); //1. 创建监听池
efd = epoll_create1(0);
//2. 构造监听事件,加入监听池
event.events = EPOLLIN|EPOLLET; //可读 边沿触发
event.data.fd = fd1; //关注的文件
epoll_ctl(efd,EPOLL_CTL_ADD,fd1,&event);
/* 分别两管道构造 */
event.events = EPOLLIN|EPOLLET; //可读
event.data.fd = fd2; //关注的文件
epoll_ctl(efd,EPOLL_CTL_ADD,fd2,&event); //添加事件到监听池
//3. 等待事件的发生
events = calloc(,sizeof event); //保存事件的数组
n=epoll_wait(efd,events,100,-1);
for(i=;i<n;i++)
{
if(events[i].events&EPOLLIN)
{
read(events[i].data.fd,&c,);
printf("file %d can be read\n",events[i].data.fd);
}
}
free(events); close(fd1); close(fd2);//关闭打开的文件+释放申请的堆内存
}
检测:分别编写程序,向两个管道文件内写入数据,编译运行 -> epoll立即检测到事件发生。
----------------------------------------------------------------------------------------------------------
epoll架构加入摄像头采集端,监听摄像头是否采集到数据(应用用途)
创建基本的监听架构,将摄像头采集端作为监听事件,添加至监听池,当监听到摄像头捕捉到图像文件时,即自动触发启动对应的处理函数,将获取到图片数据发送至显示子系统,添加移植至GTK程序即可实现视频采集播放。
3-1. 基于epoll架构的视频采集端设计的更多相关文章
- 基于视频压缩的实时监控系统-sprint1基于epoll架构的采集端程序设计
part1:产品功能 part2:epoll机制 select与epoll区别 1.select与epoll没有太大的区别.除了select有文件描述符限制(1024个),select每次调用都需 ...
- 基于PCIe的多路视频采集与显示子系统
基于PCIe的多路视频采集与显示子系统 1 概述 视频采集与显示子系统可以实时采集多路视频信号,并存储到视频采集队列中,借助高效的硬实时视频帧出入队列管理和PCIe C2H DMA引擎, ...
- 基于.NET架构的树形动态报表设计与应用
在一些统计报表中,利用树形结构报表来实现维度钻取功能是十分常见的.通过逐级钻取,可以快速查看更细粒度的指标数据,如项目施工进度报告等. 使用葡萄城报表控件——ActiveReports ,即可轻松设计 ...
- 基于Hi3559AV100的视频采集(VDEC-VPSS-VO)整体框图设计
下面给出基于Hi3559AV100的视频采集整体设计,具体设计将在后续给出: 图形采集端整体设计 Hi3559AV100软件程序按结构划分可分为4层,第一层是硬件驱动层,第二层是操作系统层,第三层是媒 ...
- 基于H5的摄像头视频数据流采集
最近,为了支持部门团队的项目,通过H5实现摄像头的视频流数据的捕获,抓取到视频流后,传输到视频识别服务器进行后续的逻辑处理. 视频数据的采集过程,其实是比较没有谱的过程,因为之前没有研究过HTML5操 ...
- 基于Linux的v4l2视频架构驱动编写(转载)
转自:http://www.linuxidc.com/Linux/2011-03/33022.htm 其实,我刚开始一直都不知道怎么写驱动,什么都不懂的,只知道我需要在做项目的过程中学习,所以,我就自 ...
- 基于Linux的v4l2视频架构驱动编写
其实,我刚开始一直都不知道怎么写驱动,什么都不懂的,只知道我需要在做项目的过程中学习,所以,我就自己找了一个关于编写Linux下的视频采集监控项目做,然后上学期刚开学的时候听师兄说,跟院长做项目,没做 ...
- 轻松构建基于 Serverless 架构的弹性高可用音视频处理系统
前言 随着计算机技术和 Internet 的日新月异,视频点播技术因其良好的人机交互性和流媒体传输技术倍受教育.娱乐等行业青睐,而在当前, 云计算平台厂商的产品线不断成熟完善, 如果想要搭建视频点播类 ...
- 基于FPGA的LCD+CMOS视频采集显示使用小结
基于FPGA的LCD+CMOS视频采集显示 液晶显示器采用扫描模式,RGB888 电源采用:+5V供电 usb供电有时候会出现供电不足的问题 显示器接口有两种选择:16bit或24bit 分别对应 ...
随机推荐
- 使用增量备份修复DG中的GAP
问题描述 oracle中DG出现主备不同步现象,alert日志报警有gap信息,但是v$archive_gap视图查不到任何信息.同时主库上的对应归档已经删除且没有备份 解决方案 1.查询备库的scn ...
- LinkedHashMap源码解读
1. 前言 还是从面试中来,到面试中去.面试官在面试 Redis 的时候经常会问到,Redis 的 LRU 是如何实现的?如果让你实现 LRU 算法,你会怎么实现呢?除了用现有的结构 LinkedHa ...
- ASP.net MVC 构建layui管理后台(整体效果)
登录页: 首页 模块管理 角色管理,角色分配 用户管理
- Spyder——科学的Python开发环境
刚开始接触Python的时候,网上找到的资料基本上上来就是介绍Python语言,很少有对开发环境进行讲解的,但如果在学习的过程中不断练习,这样效率会更高,所以特意将一个Python的开发环境Spyde ...
- 【vue生命周期】- 详解
这篇文章通俗易懂,写的不错,本文转载至:https://www.cnblogs.com/happ0/p/8075562.html 详解Vue Lifecycle 先来看看vue官网对vue生命周期的介 ...
- 【Weiss】【第03章】练习3.16:删除相同元素
[练习3.16] 假设我们有一个基于数组的表A[0,1...N-1],并且我们想删除所有相同的元素. LastPosition初始值为N-1,但应该随着相同元素被删除而变得越来越小. 考虑图3-61中 ...
- 2018 巅峰极客CTF misc writeup
flows 拿到一个pcap包,用wireshark打开,发现是USB协议,尝试在kali下使用tshark提取,提取失败,发现异常.回到wireshark分析数据.在其中一个数据包中发现了tip 把 ...
- LeetCode#232-Implement Queue using Stacks-用栈实现队列
一.题目 使用栈实现队列的下列操作: push(x) -- 将一个元素放入队列的尾部. pop() -- 从队列首部移除元素. peek() -- 返回队列首部的元素. empty() -- 返回队列 ...
- [组件封装]微信小程序-日历
描述 切换月份, 当天文案为今天, 日期背景变色, 日期红点标识, 点击选中日期. 效果 源码 calendar.wxml <view class="component"&g ...
- 解决tinyint映射成boolean/byte的问题
前言 最近受疫情的影响,公司要做一个类似一码通的系统为客户服务.由我来进行表的设计.创建表之后需要逆向生成Java的entity.mapper.mapper.xml.由于我在数据库中定义了大量 tin ...