Directshow GraphEdit相机采集同设备无法创建双图问题咨询
DirectShow单Graph实现相机预览+图像抓拍+视频录制的解决方案
大多数UVC类USB相机的捕获引脚同一时间仅支持被一个Filter Graph独占访问,你遇到的二次调用时引脚被禁用是正常的硬件访问限制,无需创建多个Graph,单Graph内通过分流即可实现所有需求。
核心所需Filter
- Smart Tee Filter:这是实现分流的核心系统自带Filter,可将相机输出的单路视频流拆为两路独立输出,分别对应预览分支和捕获分支,两路流互不干扰
- Sample Grabber Filter:用于静态图像抓拍,可在不中断流传输的前提下获取当前帧数据
- AVI Mux Filter + File Writer Filter:用于视频录制,可单独控制启停不影响预览
完整Graph搭建链路
按以下顺序连接所有Filter即可,全程仅占用相机一次,不会触发独占限制:
- 相机视频捕获源Filter的输出引脚 → 第一个
Smart Tee Filter的输入引脚 - 第一个
Smart Tee Filter的Preview输出引脚 → Video Renderer Filter,该路负责持续输出实时预览画面 - 第一个
Smart Tee Filter的Capture输出引脚 → 第二个Smart Tee Filter的输入引脚(如果不需要同时进行抓拍和录制,可省略第二个Smart Tee,需要时动态切换连接即可) - 第二个
Smart Tee Filter的Preview输出引脚 →Sample Grabber Filter,用于点击抓拍按钮时获取帧数据 - 第二个
Smart Tee Filter的Capture输出引脚 →AVI Mux Filter输入引脚 →File Writer Filter,用于视频录制
功能实现注意事项
- 图像抓拍无需中断预览:点击抓拍按钮时直接调用
ISampleGrabber::GetCurrentBuffer接口读取当前帧的内存数据,转存为JPG/PNG等格式即可,全程预览流保持正常运行 - 视频录制启停无需重建Graph:调用
ICaptureGraphBuilder2::ControlStream接口即可单独控制录制分支的流传输启停,预览全程不受影响 - 推荐使用
ICaptureGraphBuilder2接口辅助构建Graph,可自动匹配各引脚的媒体类型,避免手动连接时出现媒体类型不匹配的问题 - GraphEdit调试阶段可先手动搭建上述链路,验证预览、抓帧、录制功能都正常后再用代码复现相同结构即可
内容的提问来源于stack exchange,提问作者Dipak D Desai
相关产品推荐
相关产品推荐

