专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 多媒体/流媒体开发

DirectShow视频采集保存的有关问题

发布时间:2011-06-27 19:27:23 文章来源:www.iduyao.cn 采编人员:星星草
DirectShow视频采集保存的问题
我想用C#+Directshow做了一个视频采集程序,能够同时进行预览、截图,在不影响预览和截图的情况下随机截取一段视频保存。
  但是以我现在的知识,我只能做到从IMediaControl.Run()到程序关闭一直都进行采集保存,能不能截取中间一个随机时间段进行保存,比如设置一个Button,当第一次点击Button的时候开始保存,第二次点击的时候保存结束,这样重复的点击,将视频保存为几个不同的文件,但是不影响视频采集的预览和截图,请各位师兄指教……~~
  部分代码如下:

  IGraphBuilder graphBuilder=(IGraphBuilder)new FilterGraph();
  IMediaControl mediaControl=graphBuiler as IMediaControl;
  ICaptureGraphBuilder2 captureGraphBuilder=(ICaptureGraphBuilder2)new CaptureGraphBuiler2();
  ISampleGrabber sampleGrabber;
  IBaseFilter sourceFilter; //视频采集设备的源Filter
  IBaseFilter aviWriter; //保存文件的Filter
  ………………
  ………………
  ………………
  captureGraphBuilder.SetFiltergraph(graphBuilder);
  sourceFilter = FindCaptureDevice();//自定义函数获取设备源
  graphBuilder.AddFilter(sourceFilter, "Video Capture"); 

  sampleGrabber = (ISampleGrabber)new SampleGrabber();
  IBaseFilter grabBFilter = (IBaseFilter)sampleGrabber;
  ConfigSampleGrabber(sampleGrabber);//自定义函数设置ISampleGrabber
  graphBuilder.AddFilter(grabBFilter, "Ds.NET Grabber");

  captureGraphBuilder.RenderStream(PinCategory.Preview, MediaType.Video, sourceFilter, grabBFilter, null);//预览与截图

  captureGraphBuilder.SetOutputFileName(MediaSubType.Avi, @"C:\A.Avi", out aviWriter,out fsFilter);//设置保存文件并初始化aviWriter
  captureGraphBuilder.RenderStream(PinCategory.Capture, MediaType.Video, sourceFilter, null, aviWriter);//保存文件

  我不知道最后一段有关保存的代码是否可以在其他地方进行控制,如何控制它的开始与结束,如何重新设置保存的文件名。

------解决方案--------------------
你的要求,必须把采集和保存分开。
with 2 graph.
1. caputer filre ->sample grab->null render
| //samole deliver to source filter.
2. bridge source filter->avi mux->writer.
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: