Directshow采集视频细节
2018-03-20 19:36
1051 查看
Directshow 采集遇到的几个问题
CPU占用高windows下使用的网络摄像头产品各种各样,支持的分辨率,视频格式也各有不同,在我们的项目中使用的一款摄像头,遇到一个奇怪了的问题,只是开启了摄像头的采集(采集为回调模式,回调函数中啥都没做),进程占用的CPU就会达到7%左右。经查阅资料发现了问题,在采集视频时,我指定的视频格式为RGB24而实际上该摄像头并不支持RGB24数据。DirectShow会自动加入一个Color Space Filter将采集出来的数据转换为RGB24。正是这个转换的Filter占用了CPU。如果将格式设置为摄像头支持的格式(比如 YUY2),CPU占用就会下降。
网络摄像头参数设置问题
这里的参数设置指的是分辨率和帧率,有时候使用一款网络摄像头,比如设置了采集分辨率为1080P,帧率为30。结果实际采集出来的效果是图像一卡一卡,很不流畅,帧率只有几帧。其实这种情况并不是程序的问题,而是摄像头参数支持的问题,如下图为罗技C920网络摄像头的参数信息:
可以看到画红线的,在YUY2格式下,1080P的最大帧率为5帧。当把视频格式设置为YUY2或RGB24(YUY2转化而来)时,实际采集的帧率就只有5帧。
所以这里有个问题要考虑,当设置采集参数时是应该以帧率优选还是以分辨率优选,在我们的项目中是以帧率优先的:在匹配采集参数时,选择满足帧率的最大分辨率,在编码前会对分辨率进行缩放达到指定分辨率。如果以分辨率优先,摄像头要是对选择的分辨率的帧率只有几帧,那么图像定会一卡一卡很影响体验。
封装Driectshow视频采集
基于DriectShow封装了一个视频采集类,该类支持如下功能:1. 采集模式为回调模式,默认视频格式为RGB24。
2. 支持设置采集的视频数据的分辨率及帧率,支持以预定义的策略设置采集的分辨率。
3. 支持视频预览。
4. 支持检索系统中可用的摄像头。
5. 支持打开指定的摄像头。
Driectshow采集封装代码
资料
采集格式为RGB24时,DirectShow添加的转换https://stackoverflow.com/questions/1827635/how-to-capture-live-camera-frames-in-rgb-with-directshow
Using the Sample Grabber
https://msdn.microsoft.com/en-us/library/windows/desktop 4000
/dd407288(v=vs.85).aspx
Sample Grabber的回调模式
https://msdn.microsoft.com/en-us/library/windows/desktop/dd376992(v=vs.85).aspx
Preview与采集同时开启
https://msdn.microsoft.com/en-us/library/windows/desktop/dd387893(v=vs.85).aspx
相关文章推荐
- 关于H.264,jrtp,directShow视频采集等的整合开发研究
- 用DirectShow实现视频采集-流程构建
- opencv+directshow采集视频图像
- 用Directshow进行电视卡的音视频信号采集和SDI信号输出
- [引]C# WinForm DirectShow视频采集及图片抓取实例DxSnap
- 关于H.264,jrtp,directShow视频采集等的整合开发研究
- 用DirectShow实现视频采集-流程构建
- [引]C# WinForm DirectShow视频采集及图片抓取实例DxSnap
- 用DirectShow实现视频采集-流程构建
- DirectShow视频采集和OpenCV
- 用Directshow进行电视卡的音视频信号采集和SDI信号输出
- 用DirectShow实现视频采集
- 用DirectShow实现视频采集
- DirectShow&DirectSound采集音频视频数据 vs2013
- Window7系统 opencv 利用DirectShow 进行视频采集的解决方案
- 怎样改变DirectShow中采集的视频大小.
- DirectShow基础编程 采集视频数据
- 摘录DirectShow数据,视频采集
- 【MFC两种视频图像采集方法】DirectShow与Opencv
- directshow 采集视频