[DirectShow] [bug调研] 捕获多个摄像头时 后续的摄像头初始化失败

来源:互联网 发布:mysql远程访问权限 编辑:程序博客网 时间:2024/05/02 15:31

场景》

在做一个直播工具,项目里实现了RenderFilter,可同时接收若干个摄像头的音视频数据并渲染


问题》

当添加多个摄像头时(每一个摄像头会单独创建一个IGraphBuilder进行Filter管理),在部分电脑(目前发现笔记本最容易复现)上,初始化第三个摄像头时 函数调用会失败:  IMediaControl::Run()   返回错误码 0x8007001F。

参考OBS、斗鱼TV等直播软件 也都有该问题 :在笔记本上添加到第n个摄像头时 摄像头画面捕获不到(通常是添加到第三个)


调查结论》

根源是USB bandwidth的限制 当所有摄像头的bandwidth总和超过硬件支持的量以后 就不能再创建DirectShow采集实例了

经搜索相关信息 该问题只能优化 不能彻底解决,需要同时采集多个摄像头时 优化办法有两个:

办法1: 使用PCI Card ,扩容USB bandwidth

办法2:每一个摄像头初始化时 尽量使用低的分辨率和码率参数(该方法已验证有效)


网上发现的与该问题现象一致的case:
1、http://bbs.csdn.net/topics/340220585
2、https://github.com/sarxos/webcam-capture/issues/139
3、http://stackoverflow.com/questions/11986119/run-multiple-webcams-at-a-time-using-directshow
4、http://superuser.com/questions/40715/recording-from-two-webcams-simultaneously-on-one-computer

其中第3、4点指出 根源是USB接口有bandwidth的限制 当所有摄像头的bandwidth总和超过硬件支持的量以后 就不能再创建DirectShow采集实例了


2 0
原创粉丝点击