DirectShow
文章平均质量分 66
冷月醉雪
这个作者很懒,什么都没留下…
展开
-
DirectShow 基础教程
让我们通过以下代码对DirectShow有个初步的认识#include <dshow.h> #pragma comment(lib,"strmbasd.lib") #pragma comment(lib,"quartz.lib"); void main() { IGraphBuilder *pGraph = NULL; IMedi...原创 2018-02-27 14:33:49 · 955 阅读 · 0 评论 -
Graph 构建概述
要创建过滤器图形,首先创建一个过滤器图形管理器的实例:IGraphBuilder* pIGB;HRESULT hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pIGB); Filter Graph Mana...原创 2018-03-23 14:38:14 · 652 阅读 · 0 评论 -
DirectShow 智能连接
智能连接是Filter Graph Manager用于构建过滤器图形的机制。 它由几个相关的算法组成,选择过滤器并将它们添加到过滤器图形中。 智能连接涉及以下IGraphBuilder方法:IGraphBuilder::AddSourceFilter IGraphBuilder::Render IGraphBuilder::RenderFile IGraphBuilde...原创 2018-03-23 15:00:48 · 432 阅读 · 0 评论 -
Data Flow in the Filter Graph
概述 数据保存在缓冲区中,它们只是字节数组。 每个缓冲区都被称为媒体样本的COM对象封装,该样本实现了IMediaSample接口。 样本由另一种类型的对象创建,称为分配器,它实现IMemAllocator接口。 为每个引脚连接分配一个分配器,尽管两个或多个引脚连接可能共享相同的分配器。 下图说明了这个过程: 每个分配器创建一个媒体采样池并为每个采样分配缓冲区。只要过滤器需要...原创 2018-03-24 10:29:04 · 262 阅读 · 0 评论 -
DirectShow之事件通知
概述 过滤器通过发布事件通知来通知Filter Graph Manager关于事件。 该事件可能是某种预期的结果,例如流结束,或者它可能表示错误,例如未能呈现流。 过滤器图形管理器本身处理一些过滤器事件,并使其他应用程序处理。 如果筛选器图形管理器不处理筛选器事件,它会将事件通知放入队列中。 过滤器图也可以为应用程序排队自己的事件通知。 应用程序从队列中检索事件,并根据事件的类...原创 2018-03-24 10:28:49 · 391 阅读 · 0 评论 -
DirectShow之视频渲染
概述 DirectShow提供了几种渲染视频的滤镜: ·Video Renderer filter:此过滤器适用于支持DirectX的所有平台,并且没有特定的系统要求。 Video Renderer尽可能使用DirectDraw来呈现视频; 否则,它使用GDI。 此筛选器是比Windows XP早的平台上的默认视频渲染器。 ·Video Mixing Renderer F...原创 2018-03-24 10:28:36 · 2631 阅读 · 0 评论 -
DirectShow 事件回应
事件通知原理 当DirectShow应用程序正在运行时,事件可能发生在过滤器图形中。 例如,一个过滤器可能会遇到流式传输错误。 过滤器通过发送事件来提醒Filter Graph Manager,事件由事件代码和两个事件参数组成。 事件代码指示事件的类型,事件参数提供附加信息。 参数的含义取决于事件代码。 某些事件由Filter Graph Manager静默处理,无需通知应用程...原创 2018-03-24 10:28:11 · 382 阅读 · 0 评论 -
DirectShow之枚举设备和过滤器
Using the System Device Enumerator System Device Enumerator提供了一种统一的方法来枚举按类别枚举在用户系统上注册的过滤器。 而且,它可以区分单个硬件设备,即使同一个过滤器支持它们。 这对于使用Windows驱动程序模型(WDM)和KSProxy过滤器的设备特别有用。 例如,用户可能有几个WDM视频捕捉设备,全部由相同的过滤器支持。...原创 2018-03-24 10:27:55 · 1151 阅读 · 0 评论 -
Enumerating Objects in a Filter Graph
应用程序可能需要在过滤器图表中找到特定的过滤器,或者甚至需要在过滤器上定位特定的过滤器。例如,它可能使用特定过滤器暴露的接口, 或者它可能会构建专门的过滤器图形,并需要调用各个引脚上的方法来连接过滤器。为此,DirectShow提供了几种枚举过滤器图形中对象的方法。 Enumerating Filters Filter Graph Manager支持IFilterGrap...原创 2018-03-24 18:27:35 · 654 阅读 · 0 评论 -
DirectShow体系结构 之 Filter Graph Manager
Filter GraphManager是一个用以控制Filter Graph中的Filter的COM对象。它提供了许多功能,包括:协调Filter之间的状态变化;建立参考时钟;将事件返回给应用程序;提供建立Filter Graph的方法共应用程序调用。 1)状态变化:Filter的状态变化必须遵循一个特定的次序。因此,应用程序不能将状态变化的命令直接发给Filter,而是将一个单独...原创 2018-03-21 10:16:17 · 421 阅读 · 0 评论 -
DirectShow体系结构之Filter
Filter是DirectShow最基本的概念。DirectShow使用Filter Graph来管理Filter,Filter Graph是Filter的容器,而Filter是Filter Graph中的最小功能模块。Filter按照功能来分,大致分为三类:Source Filters、Transform Filters和Renderer Filters。Source Filter主要负...原创 2018-03-21 10:51:13 · 425 阅读 · 0 评论 -
DirectShow体系结构之Pin
Filter加入Filter Graph后,由Filter Graph对其进行控制,完成需要的操作。但是Filter之间并不是直接相连的。Filter只完成对数据的处理,在Filter Graph中数据的接收和输出并不是完全由Filter自身完成的。这里需要介绍另一个COM组件—Pin。Pin分为输入Pin和输出Pin两种,分别完成数据的输入和输出工作,它是Filter处理数据的来源和去向。...原创 2018-03-21 11:24:49 · 665 阅读 · 0 评论 -
DirectShow体系结构之分配器和媒体样本
Filter通过Pin与Pin之间的连接来传递数据,数据从一个Filter的输出Pin转移到另一个Filter的输入Pin。负责分配内存空间的这个对象称为分配器,是一个暴露IMemAllocator接口的COM对象。 当两个Pin相连时,其中的一个Pin必须提供一个分配器。DirectShow定义了一个方法调用序列来决定由哪个Pin来提供分配器。Pin还负责协商分配器创建的缓冲数...原创 2018-03-21 11:33:19 · 166 阅读 · 0 评论 -
DirectShow 工作流程
在DirectShow框架中,应用程序使用DirectShow提供的方法完成需要的功能,这些方法被称为接口。所有的DirectShow都提供IBaseFilter接口,所有的Pin也都提供IPin接口。DirectShow也定义了许多其他的接口以实现特定的功能。应用程序就是通过调用这些接口,来使用DirectShow的功能,完成数据的控制和处理过程。数据流概述 数据是以简单字节...原创 2018-03-21 12:12:55 · 497 阅读 · 0 评论 -
WDM与VFM
视频采集卡根据使用驱动程序类型的不同,目前市场上大致有两种视频采集卡:VFM(Video for Windows)卡和WDM(Windows Driver Model)卡。前置是一种趋于废弃的驱动模型,而后者是前置的替代模型。另外,WDM还支持更多新的特性,比如直接支持电视接收、视频会议、1394接口的设备、桌面摄像机、多条视频流同时输出等。 在编程实现中,WDM卡选择视频输入端...原创 2018-03-21 15:28:30 · 893 阅读 · 0 评论 -
DirectShow 视频采集
视频采集模块主要完成的功能是枚举视频采集设备生产列表;枚举音频采集设备生成列表;枚举视频采集设备上支持的所有视频格式;枚举音频采集设备上支持的所有音频格式;调整采集设备输出图像的显示参数;实时保存采集的视频文件。 视频采集设备枚举 DirectShow使用特殊的Filter对视频采集设备进行封装,WDM驱动模型的视频采集设备使用WDM Video CaptureFilter...原创 2018-03-21 18:14:59 · 1129 阅读 · 0 评论 -
DirectShow之视频处理
视频处理技术是一个很大的范畴,包括了视频技术的很多方面。在软件中,主要实现了视频文件的分割,视频文件的合成,视频的格式转换,图像序列合成视频,视频的一些特效处理。 视频处理系统结构 在软件上,本系统的工程主要是DirectShow链路,主要包括源Filter,音视频分离Filter,解码Filter、编码Filter、合成Filter、写文件Filter。在软件编程以前,...原创 2018-03-21 20:04:27 · 872 阅读 · 0 评论 -
Add a Filter by CLSID
以下函数创建一个具有指定类标识符(CLSID)的过滤器,并将其添加到过滤器图形中:// Create a filter by CLSID and add it to the graph.HRESULT AddFilterByCLSID( IGraphBuilder *pGraph, // Pointer to the Filter Graph Manager. ...原创 2018-03-26 15:20:49 · 364 阅读 · 0 评论 -
图形构建组件
DirectShow提供了如下可用于构建Filter Graph的组件: ·Filter Graph Manager: 该对象控制过滤器图形。 它支持IGraphBuilder,IMediaControl和IMediaEventEx等接口。 所有DirectShow应用程序都会在某个时候使用此对象,但在某些情况下,另一个对象会为应用程序创建Filter Graph Manager。...原创 2018-03-23 14:22:39 · 411 阅读 · 0 评论 -
硬件设备接入Filter Graph
包装Filter 所有DirectShow Filter都是用户模式的软件组件。为了使内核模式硬件设备(如视频采集卡)接入DirectShow Filter Graph,设备必须为用户模式Filter。这些Filter包括音频捕捉Filter、VFW捕捉Filter、电视调谐器Filter、电视音频Filter和模拟视频交叉开关Filter。DirectShow还提供名为KsProxy的F...原创 2018-03-23 14:09:28 · 283 阅读 · 0 评论 -
DirectShow介绍
DirectShow是一个windows平台上的流媒体框架,提供了高质量的多媒体流采集和回放功能。它支持多种多样的媒体文件格式,包括ASF、MPEG、AVI、MP3和WAV文件,同时支持使用WDM驱动或早期的VFW驱动来进行多媒体流的采集。DirectShow整合了其他的DirectX技术,能自动地侦测并好使用可利用的音视频硬件加速,也能支持没有硬件加速的系统。 DirectShow...原创 2018-02-27 15:23:42 · 426 阅读 · 0 评论 -
DirectShow 概念介绍
设置DirectShow开发的编译环境头文件 所有的DirectShow应用都需要Dshow.h这个头文件,某些DirectShow接口需要附加的头文件,参考接口的说明视具体情况而定。库文件 DirectShow使用以下库文件: ·Strmiids.lib 输出类标识(CLSID)和接口标识(IID),所有DirectShow应用均需要此库。 ·Quartz...原创 2018-02-27 16:24:59 · 425 阅读 · 0 评论 -
DirectShow 体系概述
多媒体的难题 ·多媒体流包含了巨大的数据量,而这些数据都必须非常快地被处理 ·音频和视频必须同步,因此它们必须在同一时间开始或停止,并以同一速率播放 ·数据可能来源很多,如本地文件,网络,电视广播和视频摄像机 ·数据有各种各样的格式,如AVI、SAF、MPEG和DV ·程序员无法预知最终用户使用什么样的硬件设备DirectShow的解决方案...原创 2018-02-27 18:20:58 · 207 阅读 · 0 评论 -
DirectShow Filter Graph组件
DirectShow Filter DirectShow使用一个模块化的架构,每个处理过程都由一个叫做filter的COM对象来实现。DirectShow为应用程序提供了一系列标准的filter,开发者也可编写自己的filter来扩展DirectShow的功能。下面是播放一个AVI文件的步骤: ·从文件中读取数据并转换成字符流(File Source filter) ·检查AV...原创 2018-02-27 19:13:30 · 317 阅读 · 0 评论 -
DirectShow AVI文件操作
由于AVI格式是微软推出的,所以在Windows下操作比较容易,这里我们DirectShow读写AVI视频文件,并把所有操作封装成一个类:AVICodec。下面是类的的定义:class AVICodec{public:AVICodec(){size = -1;}AVICodec(LPCWSTR avifile);void release();int init_getfram...原创 2018-02-27 20:25:57 · 465 阅读 · 0 评论 -
DirectShow 构建Filter Graph
用于构建Graph的组件 DirectShow提供了一系列用于构建filter graph的组件,包括: ·Filter Graph Manager:这个对象用于控制Filter Graph,支持IGraphBuilder、IMediaControl和IMediaEvent等许多接口。所有的directshow应用程序都需要在某些地方用到这个对象,虽然在有些情况下,是其它的对象为应...原创 2018-02-28 11:20:04 · 314 阅读 · 0 评论 -
DirectShow Filter Graph中的数据流
DirectShow数据流概述 数据首先是被保存在缓冲区里的,在缓冲区里,它们仅仅是一个字节数组。每一个缓冲区被一个称作媒体样本(media samole)的COM对象所包含,media sample提供IMediaSample接口。media sample由另一个称作分配器(allocator)的COM对象创建,allocator提供IMemAllocator接口。每一个pin连接都指...原创 2018-02-28 11:57:37 · 322 阅读 · 0 评论 -
DirectShow中的事件通知
概述 一个filter通过发送一个事件来通知filter graph manager某个事件已经发生。这些事件可以是一些预知的事件比如流结束事件,也可以是一些异常如render流时失败。一部分事件由filter graph manager自己处理,另一部分由应用程序来处理。如果filter graph manager不处理某个事件,那么这个事件会被放入到队列中。filter graph也可以...原创 2018-02-28 12:25:51 · 233 阅读 · 0 评论 -
DirectShow 简介
微软DirectShow是微软Windows平台上的流媒体体系结构。DirectShow提供了高质量的多媒体流采集和回放功能。它支持多种多样的媒体文件格式,包括ASF、MPEG、AVI、MP3和WAV文件,同时支持使用WDM驱动或早期的VFW驱动来进行多媒体流的采集。DirectShow整合了其他的DirectX技术,能自动地侦测并好使用可利用的音视频硬件加速,也能支持没有硬件加速的系统。...原创 2018-02-28 16:34:27 · 498 阅读 · 0 评论 -
DirectShow体系结构 之 基本原理
DirectShow是一个开放性的应用框架,也是一套基于COM的编程接口。下图是DirectShow框架关系图,它展示了应用程序、DirectShow组件和DirectShow支持的软硬件之间的关系。DirectShow的Filter与各种设备进行通信并对它们进行相应的控制,这些设备包括本地文件系统、电视卡、视频采集卡、VFW编解码器、显示器和声卡。通过这种方式,DirectShow成功的...原创 2018-02-28 17:13:40 · 469 阅读 · 0 评论 -
DirectShow 简介
Microsoft DirectShow是用于MicrosoftWindows®平台上的流媒体的体系结构。 DirectShow提供高质量的多媒体数据流采集和回放。 它支持各种格式,包括Advanced Systems Format(ASF),Motion Picture Experts Group(MPEG),Audio-Video Interleaved (AVI),MPEG Audi...原创 2018-03-22 16:55:59 · 1044 阅读 · 0 评论 -
初探DirectShow
构建DirectShow应用程序 本章节描述构建DirectShow应用程序所需的头文件和库。Windows SDK中提供了最新的DirectShow头文件和库。头文件 所有的DirectShow应用程序都需要Dshow.h头文件,一些DirectShow接口可能还需要额外的头文件。库文件 调试版和发布版都是用相同的.lib文件。 F...原创 2018-03-22 17:41:39 · 341 阅读 · 1 评论 -
DirectShow 播放音视频文件
一个DirectShow应用程序总是执行相同的基本步骤:创建一个Filter Graph Manager的示例; 使用Filter Graph Manager来构建Filter graph; 运行Graph,使数据通过Filter流动; 在编译之前,请包含头文件Dshow.h并链接到静态库文件strmiids.lib. 首先调用CoInitialize或CoIni...原创 2018-03-22 18:21:49 · 954 阅读 · 0 评论 -
DirectShow基类参考
Class Description CAggDirectDraw 弃用. CAggDrawSurface 弃用. CAMEvent (用于手动和自动重置事件的封装类)Wrapper class for manual- and auto-reset events. CAMMsgEvent (用于执行消息处理的事件对象的封装类)Wrapper class ...原创 2018-03-22 18:35:43 · 238 阅读 · 0 评论 -
DirectShow 媒体类型
媒体类型是描述数字媒体格式的通用和可扩展的方式。 当两个Filter连接时,它们就媒体类型达成一致。 媒体类型标识上游Filter 将传递给下游Filter的数据类型以及数据的物理布局。 如果两个Filter无法就媒体类型达成一致,则它们将无法连接。对于某些应用程序,您不必担心媒体类型。 例如,在文件播放中,DirectShow处理所有细节。 其他类型的应用程序可能需要直接处理媒体类型。媒体...原创 2018-03-23 10:34:28 · 473 阅读 · 0 评论 -
媒体样本和分配器
Filter通过Pin连接传递数据。数据从一个Filter的输出Pin移动到另一个Filter的输入Pin。输出Pin传递数据最常用方式是通过调用输入端的IMemInputPin::Receive方法,但也存在其他的机制。 根据Filter的不同,媒体数据的内存可以通过多种方式进行分配:在堆上,在DirectDraw层面,使用共享GDI内存或使用其他分配机制。负责分配内存的对象称为...原创 2018-03-23 12:25:52 · 217 阅读 · 0 评论 -
Find an Unconnected Pin on a Filter
在典型的DirectShow图形构建场景中,您需要一个与特定引脚方向(输入或输出)匹配的未连接引脚。 例如,当连接两个滤波器时,可以将一个滤波器的输出引脚连接到另一个滤波器的输入引脚。 在连接它们之前,两个引脚必须断开。 首先,我们需要一个测试引脚是否连接到另一个引脚的函数。 该函数调用IPin :: ConnectedTo方法来测试引脚是否连接到另一个引脚。// Query...原创 2018-03-26 15:35:32 · 619 阅读 · 0 评论