DirectShow介绍

DirectShow 用于控制多媒体数据流;它可以在运行时允许用户播放数字电影和对不同格式的声音进行解码,包括MPEG-1。这种播放性能可以让音视频卡支持Microsoft DirectX?的API,DirectShow 同样可以播放AVI电影文件和Apple QuickTime (.mov)格式文件。

DirectShow 被广泛地应用于Windows 95, Windows 98, 和Windows 2000应用程序。DirectShow 直接和驱动程序通讯,DirectShow 不使用AVICap, 因为AVICap分配了数据缓冲区,如果一个DirectShow 层没有放在AVICap 顶层,那么缓存区数据必须要通过转化去指向它,这样会造成效率低下。

DirectShow Filter Graph
DirectShow结构定义了标准的组件去控制处理带时间标记(time-stamped)的多媒体数据流,这些组件被称为过滤器(Filter)。把这些Filter放在一个容器中,这个容器就是Filter Graph。可能有三种类型的Filter:Source ,transform 和render。。(注:有些资料将Filter翻译为过滤器,FilterGraph翻译为过滤器图表,这里我都用原单词)。应用程序可以通过Filter Graph管理器来进行数据访问。Filter Graph 管理器会对Filter Graph配置进行管理,同时还会通过Filter Graph控制数据的转移。Filter Graph 管理器提供了一套COM接口,去允许应用程序与Filter Graph实现通讯。应用程序可以直接调用Filter Graph管理器接口去控制媒体流或者去获得Filter事件。还可以使用DirectShow ActiveX的OCX控件进行程序设计。,还有一套MCI子集命令可以用来向后兼容Microsoft VFW 1.x版本和遵循OM-1 MPEG MCI 规范。


WDM数据流 
WDM数据流主要应用包括视频捕获,电视浏览,VBI数据编码支持和DVD电影播放。DirectShow可以非常容易地使用这些数据。 

视频捕获 Minidrivers
视频卡由一些组件构成,比如电视信号调谐器,AM/FM调谐器,视频解码器,音频解码器等,它们都由WDM Minidriver控制。使用Minidrivers ,就可以允许硬件开发商为不同的卡开发器驱动程序,他们只需要把Minidriver写到他们的卡上,当硬件设计修改后,不需要对修改驱动做更多的修改。

在Windows 98 和Windows 2000下,视频设备使用WDM 的Minidriver去控制视频数据流,视频捕获 Minidrivers 相当与一个客户端,它会去控制处理硬件设备的图像数据和其他相关数据。Minidrivers提供了如下的功能:
捕获压缩和非压缩的视频数据流,VBI数据,时间编码和其他辅助数据流。 
控制视频流相关设备,比如电视信号调谐器,视频路由设备,电视音频控制器和视频压缩编码器。 
在流内核中完成处理工作,减少操作过程提高效率。 

Pins, Streams, Formats
数据流视频捕获驱动程序可以同时支持多个压缩数据,非压缩数据,时间编码, VBI解码数据以及自定义数据。为了保证每种数据同步匹配,捕获驱动程序为这些数据创建了一个新的数据流。每个流都会用一个WDM流针脚(Pin)来传递,通过针脚,单个数据流就可以把它的数据连接到不同的流Filter中去,还可以通过DirectShow 用户Filter的输出针脚,把数据转换输出给用户。(前面我们提到Filter的3种类型:Source ,transform 和render。Source只有输出针脚,而transform有输入、输出2个针脚,render只有输入针脚)

每个针脚都可以支持多种不同的数据格式。比如,一个针脚它可以提供RGB16, RGB24, YVU9, 和 JPEG 数字视频。针脚可以连接到一个共享的系统内存的数据缓存区,它还可以直接连接到硬件设备。

视频流命名约定
通常,DirectShow 和 WDM 流会共享媒体的格式定义和流命名约定。但是基于内核模式(Kernel-mode)和用户模式(User-mode)下的命名约定有一些小的命名差异。比如,内核模式下的很多格式定义和GUID定义会在名称前加个”KS”前缀,BITMAPINFOHEADER就是用户模式下的定义,而KS_BITMAPINFOHEADER就是内核模式下的相同结构的定义。在内核模式下,流格式使用KSDATAFORMAT数据结构。这个结构可以被扩展去包含其它特别的数据格式信息。

typedef union {

    struct {

      ULONG  FormatSize;

      ULONG   Flags;

      ULONG   SampleSize;

      ULONG  Reserved;

      GUID   MajorFormat;

      GUID   SubFormat;

      GUID   Specifier;

    };

    ULONGLONG  Alignment;

} KSDATAFORMAT, *PKSDATAFORMAT, KSDATARANGE, *PKSDATARANGE;
 

DirectShow 视频捕获的接口和属性
DirectShow 提供了与许多视频相关的接口,它们中的一些还有附带相关的属性。下面列出的这些接口是实际应用较多,并不带相关属性的:
IAMAudioInputMixer 
IAMDroppedFrames 
IAMStreamConfig 
IAMVfwCaptureDialogs 
IAMVfwCompressDialogs 
IcaptureGraphBuilder 
ICreateDevEnum 

下表列出了DirectShow 接口与捕获驱动程序通讯的相关属性。

DirectShow 接口             相关属性
 
IAMTuner                PROPSETID_VIDCAP_TUNER
IAMTVAudio              PROPSETID_VIDCAP_TVAUDIO
IAMCrossbar             PROPSETID_VIDCAP_CROSSBAR 
IAMVideoProcAmp         PROPSETID_VIDCAP_VIDEOPROCAMP
IAMAnalogVideoDecoder   PROPSETID_VIDCAP_VIDEODECODER 
IAMAnalogVideoEncoder   PROPSETID_VIDCAP_VIDEOENCODER
IAMCameraControl        PROPSETID_VIDCAP_CAMERACONTROL

捕获数据流类型
视频流大致由时间标记,数字视频,和其他相关信息(比如VBI,时间编码)组成,流可以被暂停,开始和停止。流一般是100ns一次进行数据采样,大多数情况下,每个数据帧存放在每个ImediaSample缓存区中。

流输出数据格式
流的数据类型由KSDATARANGE 数据结构的StreamDescriptionFlags 字段来标识,它们定义如下:
KS_VIDEOSTREAM_CAPTURE :主要的视频流格式,用于视频会议和把数据写入磁盘。
KS_VIDEOSTREAM_PREVIEW :用于显示视频,它使用的是没有压缩的数据格式,所以不需要进行特别的解压操作。
KS_VIDEOSTREAM_VBI     :用于VBI应用。
KS_VIDEOSTREAM_NABTS   :用于NABTS 解码VBI 采样.
KS_VIDEOSTREAM_CC 
KS_VIDEOSTREAM_EDS
KS_VIDEOSTREAM_TELETEXT:用于图文信息
KS_VIDEOSTREAM_STILL   :用于Still image.
KS_VIDEOSTREAM_IS_VPE  :用于基于VPE的数据流。
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值