directshow 9 编程

转载 2007年10月10日 21:36:00

定义

    CB_VideoCapFilters: TComboBox;
    CB_AudioCapFilters: TComboBox;
    CB_VideoFormats: TComboBox;
    CB_AudioFormats: TComboBox;
    CB_InputLines: TComboBox;

     AudioSourceFilter: TFilter;
    VideoSourceFilter: TFilter;
    FilterGraph: TFilterGraph;   

    VideoSysDev: TSysDevEnum;
    AudioSysDev: TSysDevEnum;
    VideoMediaTypes: TEnumMediaType;
    AudioMediaTypes: TEnumMediaType;

枚举端口

var
  i: integer;
begin
  VideoSysDev := TSysDevEnum.Create(CLSID_VideoInputDeviceCategory);
  for i := 0 to VideoSysDev.CountFilters - 1 do
    CB_VideoCapFilters.Items.Add(VideoSysDev.Filters[i].FriendlyName);
  CB_VideoCapFilters.ItemIndex := 0;
 

  AudioSysDev := TSysDevEnum.Create(CLSID_AudioInputDeviceCategory);
  for i := 0 to AudioSysDev.CountFilters - 1 do
    CB_AudioCapFilters.Items.Add(AudioSysDev.Filters[i].FriendlyName);
  CB_AudioCapFilters.ItemIndex := 0;

 

  VideoMediaTypes := TEnumMediaType.Create;
  AudioMediaTypes := TEnumMediaType.Create;

 

end;

选择视频源

var
  i: integer;
begin
  VideoSysDev := TSysDevEnum.Create(CLSID_VideoInputDeviceCategory);
  for i := 0 to VideoSysDev.CountFilters - 1 do
    CB_VideoCapFilters.Items.Add(VideoSysDev.Filters[i].FriendlyName);
  CB_VideoCapFilters.ItemIndex := 0;
 

  AudioSysDev := TSysDevEnum.Create(CLSID_AudioInputDeviceCategory);
  for i := 0 to AudioSysDev.CountFilters - 1 do
    CB_AudioCapFilters.Items.Add(AudioSysDev.Filters[i].FriendlyName);
  CB_AudioCapFilters.ItemIndex := 0;

 

  VideoMediaTypes := TEnumMediaType.Create;
  AudioMediaTypes := TEnumMediaType.Create;

 

end;

 

选择音频源

var
  PinList: TPinList;
  i, LineIndex: integer;
  ABool: LongBool;
begin
  AudioSysDev.SelectGUIDCategory(CLSID_AudioInputDeviceCategory);
  if CB_AudioCapFilters.ItemIndex <> -1 then
  begin
    AudioSourceFilter.BaseFilter.Moniker := AudioSysDev.GetMoniker(CB_AudioCapFilters.ItemIndex);
    AudioSourceFilter.FilterGraph := FilterGraph;
    FilterGraph.Active := true;
    PinList := TPinList.Create(AudioSourceFilter as IBaseFilter);
    CB_AudioFormats.Clear;
    i := 0;
    while i < PinList.Count do
      if PinList.PinInfo[i].dir = PINDIR_OUTPUT then
      begin
        AudioMediaTypes.Assign(PinList.Items[i]);
        PinList.Delete(i);
      end else inc(i);

    for i := 0 to AudioMediaTypes.Count - 1 do
    begin
      CB_AudioFormats.Items.Add(AudioMediaTypes.MediaDescription[i]);
    end;
    CB_AudioFormats.ItemIndex := 0;

    FilterGraph.Active := false;
    CB_InputLines.Clear;
    LineIndex := -1;
    for i := 0 to PinList.Count - 1 do
    begin
      CB_InputLines.Items.Add(PinList.PinInfo[i].achName);
      with (PinList.Items[i] as IAMAudioInputMixer) do get_Enable(ABool);
      if ABool then LineIndex := i;
    end;
    CB_InputLines.ItemIndex := LineIndex;
    PinList.Free;
  end;
end;

显示属性

  ShowFilterPropertyPage(Self.Handle, VideoSourceFilter as IBaseFilter);

  ShowFilterPropertyPage(Self.Handle, AudioSourceFilter as IBaseFilter);

 

directshow 无窗模式,可按钮触发截图事件

//无窗模式,可按钮触发截图 #include #include #include #include #include #include #include ...
  • luoliba007
  • luoliba007
  • 2014年09月17日 15:28
  • 1239

使用DirectShow打开摄像头 MFC编程

之前使用OpenCV 自带的函数打开摄像头,在Win7下无法使用的朋友可以参考一下这篇文章。使用DirectShow可以实现打开多个摄像头。首先从网上下载三个文件:DirectShow、CameraD...
  • chenhezhuyan
  • chenhezhuyan
  • 2013年03月13日 16:09
  • 13998

Directshow中的视频捕捉

Directshow中的视频捕捉
  • chenlycly
  • chenlycly
  • 2016年09月26日 17:06
  • 1162

DirectShow摄像头采集

手头有个项目需要实现通过采集卡采集手机桌面,获取ROI区域图像,进而进行视频自动化评测。opencv采集性能太低,不满足60fps的要求,查了资料,据说DirectShow可以达到100+frame ...
  • gaoguide
  • gaoguide
  • 2015年08月23日 00:19
  • 4121

DirectShow 开发环境搭建(整理)

directshow sdk 开发32位程序,用GRMSDK_EN_DVD.iso, 开发64位程序,用GRMSDKX_EN_DVD.iso。 找到Samples\Multimedia\Di...
  • 91program
  • 91program
  • 2014年05月20日 16:16
  • 1775

机器视觉学习笔记(2)——基于DirectShow的多摄像头视频采集

机器视觉学习笔记(2)——基于DirectShow的多摄像头视频采集标签: 机器视觉 博客1.为什么使用DirectShow笔者使用的是两个USB摄像头,单摄像头视频采集使用OpenCV的VideoC...
  • xuelabizp
  • xuelabizp
  • 2015年12月03日 11:09
  • 3814

DirectShow中多个USB视频捕捉的连接问题

感谢作者,原文地址为:http://blog.sina.com.cn/s/blog_48720e900100rqmx.html, 如果造成任何不便,请联系我删除! 当进行多个USB视频捕捉时,不...
  • WLFF_CSDN
  • WLFF_CSDN
  • 2016年08月17日 08:51
  • 278

什么是DirectX,DirectShow与DirectX有什么区别?

在介绍同三维万能高清视频采集卡和全能音视频解码编码器软件等多媒体软件时,我们多次提到DirectShow、DirectX,那么什么是DirectShow?什么是DirectX,DirectShow与D...
  • wishfly
  • wishfly
  • 2015年10月17日 23:44
  • 986

5.使用DirectShow进行摄像头采集并进行H264实时编码

上一篇讲了怎么把视音频采集下来并合成一个AVI文件,但我们看这个AVI文件就发现,虽然很清晰,但就是大小太大了,录制短短10秒,可能就有100M以上,而且还有一个文件,就是录制只能是打开采集时开始,停...
  • klamen
  • klamen
  • 2017年02月16日 14:44
  • 2425

DirectShow编程实现摄像头视频捕捉

前言 DirectShow是微软公司提供的一套在Windows平台上进行流媒体处理的开发包,与DirectX开发包一起发布。DirectShow为多媒体流的捕捉和回放提供了强有力的支持。用Direc...
  • zcj331
  • zcj331
  • 2014年04月11日 13:24
  • 1145
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:directshow 9 编程
举报原因:
原因补充:

(最多只允许输入30个字)