media foundation 摄像头采集实例,画面旋转,拍照,一头多采

这个实例是一个media foundation 摄像头采集的例子, 是我从一个开源工程里抽出来的。加入画面旋转, 快照, 显示窗口切换的功能。还有最出彩的就是这个采集可以对任意视频硬件进行多实例采集,不受设备独占的影响,可以满足特殊场合的使用。

大家可以用来学习,可以直接使用。代码是2013工程,直接可以编译运行。

代码下载  : https://download.csdn.net/download/wanghaisheng/13047600

一、基本使用

核心代码的调用很简单,看下面:

    int iRotation = 90;
	m_CapPreview.MFInit(0, GetDlgItem(IDC_STATIC_PLAY2)->m_hWnd, iRotation);
	m_CapPreview.MFSetMsgParent(this->m_hWnd);

这样就可以运行采集了。

 MFInit() 初始化参数,第一个设备索引,第二个是要显示的窗口,显示的窗口可以在显示过程动态切换。只需要调用一下MFSetPlayWnd()函数就可以了。

 第三个是旋转的角度,值是 90   180  270, 不是这三个值内部会转成这三个值。这个角度不能动态切换,只能在初始化时设入。如果要改变只能重新初始化。

MFSetMsgParent() 这个函数是设置一个接收窗口消息的窗口。 为什么会有这个呢,原因是内部为了能自动根据窗口大小的变化进行适应,所以接管了显示窗口的消息,如果你还想得到这些消息就要设置一个窗口来接收。这样才能完成拖动,右键菜单一类的功能。

快照功能如下调用

if (m_CapPreview.MFIsStart()){
	m_CapPreview.MFSnapshot("d:\\snapshot.bmp");
}

MFSnapshot()只有一个生成文件位置的参数, 生成的图片格式是 bmp, 它大的大小受当前显示窗口大小的限制,因为它是从显示模块中生成的,当然你也可能从媒体数据中直接生成图片这样就大了。

最后一个重要的地方是数据的回吐,就是采集的数据在哪里请看下面

int  CMFDevCapture::MFMediaDataCB(LONGLONG llSampleTime, LONGLONG llSampleDuration, const BYTE * pSampleBuffer, DWORD dwSampleSize)
{

	TRACE(" ***  Video frame size = %d\n", dwSampleSize);

	return 0;
}

如上代码就是回吐数据,你可以对数据进行进一步的处理转发等。任由你去处理。

二、类的说明

  • CMFDevCapture 是最上层的逻辑包装类。所有的调用逻辑都这个类中完成。
  • MFUtils 是Media foundation 包装类,对Media foundation进行了功能性封装,方便调用。
  • DisplayWatcher 是回显的类。
  • SampleGrabberCB 是数据捕获回调类
  • mf_devices   这文件里封装设备遍历,有音视频的设备,很好用。

 

大家自己来发挥使用吧, 里面现在只采集视频,你可以尝试采集音频,随你玩

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值