DirectShow和WicrosoftMediaFoundation实现Usb相机,包含H264格式的数据流

DirectShow是微软提供的一套在Windows上使用的流媒体框架,9.0之前与DirectX一起发布,之后包含在Windows sdk中,所以Win10及以上都是在Windows sdk中直接包含了。

Microsoft Media Foundation是Windows上的第二代流媒体框架,学习参考网址:https://docs.microsoft.com/en-us/windows/win32/medfound/microsoft-media-foundation-sdk

两者都可以获取usb相机的rgb数据流,只是DirectShow的使用可能跟电脑的配置有关,比如我曾经做过一个PC上的软件,获取并显示rgb相机的数据流,先用的DirectShow,在我自己的联想win10电脑上可以正常运行,换了一台DELL的电脑运行,死活有问题,最终考虑用Microsoft Media Foundation。

其实opencv的VideoCapture可以打开相机设备也可以选择使用哪种API,比如:

 cv::VideoCapture cap(1+cv::CAP_DSHOW);  //用Directshow打开
 cv::VideoCapture cap(0+CAP_MSMF);  //用Microsoft Media Foundation打开,和上边那个效果一样,只是camera的顺序不一样,所以参数是0或者1
 
//设置帧的宽
   bool ifSuccess=cap.set(CV_CAP_PROP_FRAME_WIDTH,2560);
//设置帧高
   ifSuccess=cap.set(CV_CAP_PROP_FRAME_HEIGHT,1440);
  //设置数据流的格式为MJPG
 ifSuccess=   cap.set(CV_CAP_PROP_FOURCC,cv::VideoWriter::fourcc('M','J','P','G'));

//预览

 cv::Mat frame;
while(cap.isOpened())
{
    cap>>frame;
     cv::imshow("video", frame);
    cv::waitKey(30);
}

但是如果想拿到H264格式的rgb数据流,opencv就不可以了,因为没这个格式可以设置,但是DirectShow和Microsoft media foundation都可以直接获取H264格式的数据流,不过DirectShow和电脑有关,我自己做了一个demo,可以通过两种方式枚举并获取UVC相机的数据流。界面如下:

在这里插入图片描述
勾选上DDSHOW或者WMF,然后就能枚举出电脑上的camera设备,也能枚举出支持的格式,分辨率,帧率;支持采图,并保存为.jpg格式。
demo下载地址:https://download.csdn.net/download/asla_1/16342631

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值