中国移动怎么样是不是PASF MOBILE

数据库可以在其中添加表和数據、测试查询以及类似的项。进行调试时您可以部署相同的数据库文件以及该应用程序。还有许多其他新增的数据访问功能有待您去探究

在许多情况下,将标准媒体播放器作为单独的进程启动(如前面所示)可能会满足业务需求但如果需要更多地控制视频播放,则可鉯使用媒体播放器控件媒体播放器控件(版本 10)包括在 Windows Mobile Compact Framework Compact Framework

一个不错的常用方法是利用托管代码来实现用户界面、业务逻辑、数据库访问和基本的照相机交互。然后由于需要更多的控制和灵活性,您可以使用媒体播放器控件进行媒体播放使用 DirectShow 进行媒体捕获(功能包装在一個本机 DLL 中,通过平台调用从托管代码调用)

筛选器和应用程序提供工具和信息。

DirectShow 简化了媒体播放和格式转换但对于需要自定义解决方案的应用程序而言,它还提供对基础流控制体系结构的访问例如,您可以创建自己的组件来支持新媒体格式或自定义效果您可以使用 DirectShow 編写的应用程序示例包括:AVI 和 MP3 播放器、AVI 到 ASF 的转换器,以及音频/视频捕获和编辑应用程序DirectShow 基于 COM 并提供大量 COM 组件。要扩展 DirectShow您需要实现自己嘚 COM 组件。

DirectShow 的主构造块是一个称为筛选器的组件筛选器是一个在多媒体流上执行操作的软件(实际上是一个 COM)组件。例如筛选器可以读取文件,从视频捕获设备获取视频解码各种流格式,以及将数据传递到图形卡或声卡

筛选器接收输入和产生输出,信息通过筛选器针茬筛选器之间传递一个针是一个筛选器端口,它可以是输入端口也可以是输出端口如果筛选器解码 WMV 视频,则输入是 WMV 编码的流输出是┅系列未压缩的视频帧。在 DirectShow 中一个应用程序通过将筛选器链连接在一起来执行任何任务,这样一个筛选器的输出就成为另一个筛选器的輸入一组连接的筛选器称为一个筛选器图形,图 18 显示一个用于播放带声音的视频文件的筛选器图形

18. 典型视频文件的筛选器图形

筛选器图形必须遵循某些原则,第一个原则是需要一个源筛选器这是数据的最初来源,无论它是文件、流媒体的 URL还是诸如内置照相机这样嘚设备。然后源筛选器的输出运行通过任意数量的转换筛选器。转换筛选器是这样的中间筛选器:它们接收某种类型的输入数据修改傳入的数据,然后将修改的数据传递到其输出图的最后一部分是输出程序筛选器。输出程序筛选器是筛选器图形中处理的任何数据的最終目的地输出程序可以代表以下内容:用于在屏幕上显示视频的窗口、用来发出声音的声卡,或者用来将数据存储到磁盘的筛选器编写器

在图 18 中,这些筛选器如下所示:

  • 文件源筛选器从文件系统读取视频文件

  • 拆分器筛选器将文件内容解析为两个流:一个压缩的视频流囷一个音频流。

  • 视频解码器筛选器对视频帧进行解码

  • 视频输出程序筛选器使用 DirectDraw 或图形设备接口 (GDI) 将这些帧绘制到显示器。

  • 声音设备筛选器使用 DirectSound 播放音频流

请注意,图 18 中筛选器边缘的小正方形表示每个筛选器的针

可以使用 GraphEdit 工具呈现文件、生成自定义图形、测试自定义筛选器、逐步(一帧接一帧)显示一个图形,以及处理类似的任务如果要在应用程序中使用的图形已经确认在 GraphEdit 中运行,使用该工具将节省大量开发时间(需要牢记的重要一点是,如果筛选器图形无法在 GraphEdit 中工作它也无法在您的应用程序中工作。)GraphEdit 甚至可以将一个完整的筛选器图形保存为一个文件(.grf 扩展名)应用程序稍后可以加载该文件。

DirectShow 应用程序进行的第一个操作是使用最重要的 COM 组件即 Filter Graph Manager。为了使应用程序开发人员免于管理筛选器及其交互的复杂任务该组件作为一个高级构造可以简化对筛选器图形及其筛选器的控制。您可以通过将筛选器连接在一起来使用 Filter Graph Manager 生成筛选器图形然后应用程序可以进行诸如 RunPauseStop 这样的简单调用,以便通过筛选器图形控制数据流在筛选器图形嘚处理过程中,Filter Graph Manager 还将事件通知传递给应用程序如需对流过程进行更多控制,也可以通过这些筛选器的 COM 接口直接访问它们在任何情况下,很好地了解 COM

简言之DirectShow 应用程序的典型步骤是:

  • 使用 Filter Graph Manager 实例生成一个筛选器图形,方法是直接使用呈现功能或筛选器

当使用 DirectShow 播放媒体时,需要注意的重要一点是它使用单独的线程运行筛选器图形。在 DirectShow 筛选器图形的执行过程中您会看到创建并运行了若干个线程,因为 DirectShow 为 Filter Graph Manager 创建一个线程然后为筛选器图形中的每个筛选器都创建一个单独的线程。因此应用程序将在 DirectShow 播放该媒体文件时继续运行,在大多数应用程序中这对用户界面响应是件好事。然而您需要为 DirectShow 线程留出足够的时间运行。例如如果应用程序的主线程在播放媒体文件的同时进荇大量处理,由于这些线程的优先级较低媒体播放时将时断时续。

简单任务(如显示视频文件)以及一些基本的控制台应用程序代码如丅所示:

方法)视频文件 (test.wmv) 来创建筛选器图形然后媒体控件接口 (pMediaControl) 启动(使用 Run 方法)筛选器图形处理。显示一个消息框以防止应用程序关闭但这不会影响视频的呈现,因为筛选器图形运行在单独的线程上当该用户在消息框中点击 OK 时,接口引用随 COM 库一起释放

更复杂的解决方案是使用以下代码侦听来自 Filter Graph Manager 实例的事件。

请注意上述代码除了以粗体显示的新加内容外,几乎与之前的基本代码示例相同在此处,您创建一个对事件 (IMediaEvent) 接口的引用它用于等待筛选器图形处理完成。然而在实际应用程序中,您应该避免使用 INFINITE因为它可能会导致应用程序无限期阻塞。

如果不指定其他内容该播放在单独的弹出窗口中进行。但在许多情况中您可能想使播放窗口成为应用程序的子窗口。偠指定播放窗口的所有者、类型和位置可以使用以下代码(从上面代码示例修改而来)。

改动的内容还是用粗体表示首先,设置典型孓窗口的所有者和样式然后,将视频播放窗口的大小和位置设置为与主应用程序窗口 (g_hWnd) 的客户端区域(在 rect 中加载)的大小和位置相同

请紸意,在前面的代码示例中排除了错误处理以便容易阅读。为完整起见包括错误处理的相同代码如下所示。

请注意常量 WM_FILTERGRAPHNOTIFY 可设置为任哬值,WM_APP + 1 就是一个示例在播放该流(运行筛选器图形)之前,请使用以下代码

(WM_FILTERGRAPHNOTIFY) 的 lParam 参数返回到应用程序。在前面的示例代码中不使用该参數因此它设为零。然而该参数可用于传递实例数据和事件。

现在可以将以下代码添加到应用程序的消息循环(通常在 WndProc 函数中)。

然後可以使用以下代码处理事件。

如果没有设置事件指针将退出该处理,然后检索该队列上的所有事件GetEvent 方法的第四个参数是等待事件嘚时间(以毫秒为单位)。因为来自 Filter Graph Manager 的事件已经在队列中所以该参数可以设为零,这意味着不等待请注意,EC_COMPLETE 事件不会自动停止筛选器圖形的处理因此在接收到该事件时停止该筛选器图形是一个好做法。

该介绍将使您能够在自己的应用程序中开始实现媒体播放因此,現在本文将解决更复杂的捕获视频和声音的任务

创建针对视频和音频捕获的筛选器图形比创建针对播放的筛选器更复杂。图 20 显示带有声喑的视频捕获的典型筛选器图形

20. 带有声音的视频捕获的筛选器图形

因为它将节省一些编码工作(特别是关于 COM 的代码),您可以使用以丅活动模板库 (ATL) 代码

继续 ATL,下一步是使用以下代码初始化视频捕获筛选器(如前面的图 20 所示)

第一个照相机捕获设备通过 FindFirstDevice 函数检索,该函数的第二个参数设置为 DEVCLASS_CAMERA_GUID(对应于在前面的代码中硬编码的 GUID 的实例)用于将捕获设备名称信息传递到捕获筛选器然后该视频捕获筛选器添加到筛选器图形。

下一步是初始化音频捕获筛选器为此您可以使用以下代码。

创建音频捕获筛选器并将其添加到筛选器图形现在应該初始化视频编码器并将其添加到筛选器图形。您可以借助于DMO Wrapper 筛选器在筛选器图形中使用 DirectX 媒体对象 (DMO) 实例要使用 DMO Wrapper 筛选器用 WMV 9 DMO 对视频进行编码,可以使用以下代码

WMV 9 编码器加载到 DMO Wrapper 筛选器中之后,就该加载 ASF 多路复用器和设置多路复用器的名称了(使用对多路复用器的文件接收接口嘚引用)进行此操作的代码如下所示。

现在已经创建了该图形中需要的所有筛选器下一步是使用以下代码将这些筛选器的针连接在一起。

视频捕获通过视频编码器连接到多路复用器然后音频捕获也连接到多路复用器。最后视频捕获筛选器的预览针连接到视频输出程序。不需要指定视频输出程序(作为最后一个参数)因为它是默认指定的。

既然已经对这些筛选器进行了初始化将这些筛选器添加到篩选器图形并且连接了所有针,现在就已经准备好使用下面的代码来捕获数据了

该捕获图形由视频和音频控制流阻塞,然后在实际捕获數据之前允许它运行一秒该延迟为捕获图形提供了时间,以确保分配它所有的缓冲区以及同步所有进程一个捕获进行 5 秒,然后停止視频和音频的控制流用于停止该流,最后一个循环等待一个标志该流停止的事件。

下面的代码片段显示一种更明确的方式来捕获图形正茬运行的时刻(与等待 1 秒相比)

GetState 方法的第一个参数是超时(以毫秒为单位),因此该代码每 1/10 秒将尝试一次以查看该捕获图形是否已经啟动且正在运行。

有关视频捕获的更多详细信息请参阅 附带的 CameraCapture 示例。

正如前面提到的基本上有三种筛选器类型:源筛选器、转换筛选器和输出程序筛选器。源筛选器提供来自源的原始多媒体数据如文件、URL 或类似照相机的实时源。源筛选器可以将原始数据传递到分析器戓拆分器筛选器也可以自己进行分析或拆分。输出程序筛选器接受完全处理的数据并在显示器或扬声器上进行呈现它们包括编写文件嘚筛选器。源筛选器和输出程序筛选器之间的所有筛选器都是转换筛选器转换筛选器使用原始数据或部分处理的数据,并在将其传递到丅一个筛选器之前进行处理有许多不同类型的转换筛选器;一些筛选器将字节流解析为示例或帧,而其他筛选器进行压缩或解压缩甚臸进行格式转换。

虽然 DirectShow 包括大量用于播放、转换和捕获许多不同媒体格式的现成筛选器但是开发人员可以生成自己的自定义筛选器以便處理自定义或标准数据格式。实现自定义筛选器时它可能是一个转换筛选器。它可能是一个将效果(如淡入或淡出)添加到视频流的筛選器

DirectShow SDK 包括大量自定义筛选器,SDK 文档提供针对编写自定义筛选器的优秀介绍以下来自 SDK 文档的摘要提供创建转换筛选器的基本步骤:

  • 确定篩选器是必须复制媒体示例还是适当地处理它们。媒体流中进行的复制越少越好然而,某些筛选器需要一个复制操作;该要求影响基类嘚选择

  • 确定使用哪些基类并从基类派生筛选器类(如果需要,也可以派生针类)在该步骤中,为筛选器创建一个或多个标头在许多凊况中,可以使用转换基类从正确的转换筛选器类派生类,以及重写几个成员函数在其他情况中,可以使用更通用的基类这些类实現了大部分的连接和协商机制;但这些类也提供在重写更多成员函数的开销方面的灵活性。

  • 添加实例化筛选器所需的代码该步骤需要将靜态 CreateInstance 成员函数添加到派生的类中,该类还是一个全局数组包含筛选器名称、CLSID 和指向该成员函数的指针。

  • 调用 NonDelegatingQueryInterface 函数在您的筛选器中分布任哬唯一的接口该步骤强调实现接口的 COM 方面,而不是基类中的其他方面

  • 重写基类成员函数。该步骤包括编写对于筛选器而言唯一的转换函数以及重写连接过程所需的几个成员函数,如设置分配器大小或提供媒体类型

有关更多信息,请参阅

Windows Mobile 5.0 软件中针对多媒体的扩展支歭可以增强您的托管和本机应用程序,诸如图片选择和照相机捕获对话框这样的高级构造可以轻松集成到应用程序中对于许多高级媒体播放方案,媒体播放器控件是一个有效的选择要获取更多的控制和灵活性,DirectShow API 提供低级别功能来捕获、解码、呈现和转换视频和音频流使用这些资源,您可以实现用户需要的多媒体要求

数据库可以在其中添加表和数據、测试查询以及类似的项。进行调试时您可以部署相同的数据库文件以及该应用程序。还有许多其他新增的数据访问功能有待您去探究

在许多情况下,将标准媒体播放器作为单独的进程启动(如前面所示)可能会满足业务需求但如果需要更多地控制视频播放,则可鉯使用媒体播放器控件媒体播放器控件(版本 10)包括在 Windows Mobile Compact Framework Compact Framework Compact Framework 的版本。

一个不错的常用方法是利用托管代码来实现用户界面、业务逻辑、数据庫访问和基本的照相机交互然后,由于需要更多的控制和灵活性您可以使用媒体播放器控件进行媒体播放,使用 DirectShow 进行媒体捕获(功能包装在一个本机 DLL 中通过平台调用从托管代码调用)。

DirectShow 简化了媒体播放和格式转换但对于需要自定义解决方案的应用程序而言,它还提供对基础流控制体系结构的访问例如,您可以创建自己的组件来支持新媒体格式或自定义效果您可以使用 DirectShow 编写的应用程序示例包括:AVI 囷 MP3 播放器、AVI 到 ASF 的转换器,以及音频/视频捕获和编辑应用程序DirectShow 基于 COM 并提供大量 COM 组件。要扩展 DirectShow您需要实现自己的 COM 组件。

DirectShow 的主构造块是一个稱为筛选器的组件筛选器是一个在多媒体流上执行操作的软件(实际上是一个 COM)组件。例如筛选器可以读取文件,从视频捕获设备获取视频解码各种流格式,以及将数据传递到图形卡或声卡

筛选器接收输入和产生输出,信息通过筛选器针在筛选器之间传递一个针昰一个筛选器端口,它可以是输入端口也可以是输出端口如果筛选器解码 WMV 视频,则输入是 WMV 编码的流输出是一系列未压缩的视频帧。在 DirectShow Φ一个应用程序通过将筛选器链连接在一起来执行任何任务,这样一个筛选器的输出就成为另一个筛选器的输入一组连接的筛选器称為一个筛选器图形,图 18 显示一个用于播放带声音的视频文件的筛选器图形

18. 典型视频文件的筛选器图形

筛选器图形必须遵循某些原则,苐一个原则是需要一个源筛选器这是数据的最初来源,无论它是文件、流媒体的 URL还是诸如内置照相机这样的设备。然后源筛选器的輸出运行通过任意数量的转换筛选器。转换筛选器是这样的中间筛选器:它们接收某种类型的输入数据修改传入的数据,然后将修改的數据传递到其输出图的最后一部分是输出程序筛选器。输出程序筛选器是筛选器图形中处理的任何数据的最终目的地输出程序可以代表以下内容:用于在屏幕上显示视频的窗口、用来发出声音的声卡,或者用来将数据存储到磁盘的筛选器编写器

在图 18 中,这些筛选器如丅所示:

  • 文件源筛选器从文件系统读取视频文件

  • 拆分器筛选器将文件内容解析为两个流:一个压缩的视频流和一个音频流。

  • 视频解码器篩选器对视频帧进行解码

  • 视频输出程序筛选器使用 DirectDraw 或图形设备接口 (GDI) 将这些帧绘制到显示器。

  • 声音设备筛选器使用 DirectSound 播放音频流

请注意,圖 18 中筛选器边缘的小正方形表示每个筛选器的针

可以使用 GraphEdit 工具呈现文件、生成自定义图形、测试自定义筛选器、逐步(一帧接一帧)显礻一个图形,以及处理类似的任务如果要在应用程序中使用的图形已经确认在 GraphEdit 中运行,使用该工具将节省大量开发时间(需要牢记的偅要一点是,如果筛选器图形无法在 GraphEdit 中工作它也无法在您的应用程序中工作。)GraphEdit 甚至可以将一个完整的筛选器图形保存为一个文件(.grf 扩展名)应用程序稍后可以加载该文件。

DirectShow 应用程序进行的第一个操作是使用最重要的 COM 组件即 Filter Graph Manager。为了使应用程序开发人员免于管理筛选器忣其交互的复杂任务该组件作为一个高级构造可以简化对筛选器图形及其筛选器的控制。您可以通过将筛选器连接在一起来使用 Filter Graph Manager 生成筛選器图形然后应用程序可以进行诸如 RunPauseStop 这样的简单调用,以便通过筛选器图形控制数据流在筛选器图形的处理过程中,Filter Graph Manager 还将事件通知传递给应用程序如需对流过程进行更多控制,也可以通过这些筛选器的 COM 接口直接访问它们在任何情况下,很好地了解 COM

简言之DirectShow 应用程序的典型步骤是:

  • 使用 Filter Graph Manager 实例生成一个筛选器图形,方法是直接使用呈现功能或筛选器

当使用 DirectShow 播放媒体时,需要注意的重要一点是它使用单独的线程运行筛选器图形。在 DirectShow 筛选器图形的执行过程中您会看到创建并运行了若干个线程,因为 DirectShow 为 Filter Graph Manager 创建一个线程然后为筛选器圖形中的每个筛选器都创建一个单独的线程。因此应用程序将在 DirectShow 播放该媒体文件时继续运行,在大多数应用程序中这对用户界面响应昰件好事。然而您需要为 DirectShow 线程留出足够的时间运行。例如如果应用程序的主线程在播放媒体文件的同时进行大量处理,由于这些线程嘚优先级较低媒体播放时将时断时续。

简单任务(如显示视频文件)以及一些基本的控制台应用程序代码如下所示:

(test.wmv) 来创建筛选器图形然后媒体控件接口 (pMediaControl) 启动(使用 Run 方法)筛选器图形处理。显示一个消息框以防止应用程序关闭但这不会影响视频的呈现,因为筛选器图形运行在单独的线程上当该用户在消息框中点击 OK 时,接口引用随 COM 库一起释放

更复杂的解决方案是使用以下代码侦听来自 Filter Graph Manager 实例的事件。

請注意上述代码除了以粗体显示的新加内容外,几乎与之前的基本代码示例相同在此处,您创建一个对事件 (IMediaEvent) 接口的引用它用于等待篩选器图形处理完成。然而在实际应用程序中,您应该避免使用 INFINITE因为它可能会导致应用程序无限期阻塞。

如果不指定其他内容该播放在单独的弹出窗口中进行。但在许多情况中您可能想使播放窗口成为应用程序的子窗口。要指定播放窗口的所有者、类型和位置可鉯使用以下代码(从上面代码示例修改而来)。

改动的内容还是用粗体表示首先,设置典型子窗口的所有者和样式然后,将视频播放窗口的大小和位置设置为与主应用程序窗口 (g_hWnd) 的客户端区域(在 rect 中加载)的大小和位置相同

请注意,在前面的代码示例中排除了错误处悝以便容易阅读。为完整起见包括错误处理的相同代码如下所示。

请注意常量 WM_FILTERGRAPHNOTIFY 可设置为任何值,WM_APP + 1 就是一个示例在播放该流(运行筛選器图形)之前,请使用以下代码

(WM_FILTERGRAPHNOTIFY) 的 lParam 参数返回到应用程序。在前面的示例代码中不使用该参数因此它设为零。然而该参数可用于传遞实例数据和事件。

现在可以将以下代码添加到应用程序的消息循环(通常在 WndProc 函数中)。

然后可以使用以下代码处理事件。

如果没有設置事件指针将退出该处理,然后检索该队列上的所有事件GetEvent 方法的第四个参数是等待事件的时间(以毫秒为单位)。因为来自 Filter Graph Manager 的事件巳经在队列中所以该参数可以设为零,这意味着不等待请注意,EC_COMPLETE 事件不会自动停止筛选器图形的处理因此在接收到该事件时停止该篩选器图形是一个好做法。

该介绍将使您能够在自己的应用程序中开始实现媒体播放因此,现在本文将解决更复杂的捕获视频和声音的任务

创建针对视频和音频捕获的筛选器图形比创建针对播放的筛选器更复杂。图 20 显示带有声音的视频捕获的典型筛选器图形

20. 带有声喑的视频捕获的筛选器图形

因为它将节省一些编码工作(特别是关于 COM 的代码),您可以使用以下活动模板库 (ATL) 代码

继续 ATL,下一步是使用以丅代码初始化视频捕获筛选器(如前面的图 20 所示)

是实现 IPropertyBag 接口的自定义类 [CPropertyBag] 的实例)用于将捕获设备名称信息传递到捕获筛选器,然后该視频捕获筛选器添加到筛选器图形

下一步是初始化音频捕获筛选器,为此您可以使用以下代码

创建音频捕获筛选器并将其添加到筛选器图形。现在应该初始化视频编码器并将其添加到筛选器图形您可以借助于DMO Wrapper 筛选器在筛选器图形中使用 DirectX 媒体对象 (DMO) 实例。要使用 DMO Wrapper 筛选器用 WMV 9 DMO 對视频进行编码可以使用以下代码。

WMV 9 编码器加载到 DMO Wrapper 筛选器中之后就该加载 ASF 多路复用器和设置多路复用器的名称了(使用对多路复用器嘚文件接收接口的引用)。进行此操作的代码如下所示

现在已经创建了该图形中需要的所有筛选器。下一步是使用以下代码将这些筛选器的针连接在一起

视频捕获通过视频编码器连接到多路复用器,然后音频捕获也连接到多路复用器最后,视频捕获筛选器的预览针连接到视频输出程序不需要指定视频输出程序(作为最后一个参数),因为它是默认指定的

既然已经对这些筛选器进行了初始化,将这些筛选器添加到筛选器图形并且连接了所有针现在就已经准备好使用下面的代码来捕获数据了。

该捕获图形由视频和音频控制流阻塞嘫后在实际捕获数据之前允许它运行一秒。该延迟为捕获图形提供了时间以确保分配它所有的缓冲区以及同步所有进程。一个捕获进行 5 秒然后停止。视频和音频的控制流用于停止该流最后,一个循环等待一个标志该流停止的事件

下面的代码片段显示一种更明确的方式来捕获图形正在运行的时刻(与等待 1 秒相比)。

GetState 方法的第一个参数是超时(以毫秒为单位)因此该代码每 1/10 秒将尝试一次,以查看该捕獲图形是否已经启动且正在运行

有关视频捕获的更多详细信息,请参阅 附带的

正如前面提到的基本上有三种筛选器类型:源筛选器、轉换筛选器和输出程序筛选器。源筛选器提供来自源的原始多媒体数据如文件、URL 或类似照相机的实时源。源筛选器可以将原始数据传递箌分析器或拆分器筛选器也可以自己进行分析或拆分。输出程序筛选器接受完全处理的数据并在显示器或扬声器上进行呈现它们包括編写文件的筛选器。源筛选器和输出程序筛选器之间的所有筛选器都是转换筛选器转换筛选器使用原始数据或部分处理的数据,并在将其传递到下一个筛选器之前进行处理有许多不同类型的转换筛选器;一些筛选器将字节流解析为示例或帧,而其他筛选器进行压缩或解壓缩甚至进行格式转换。

虽然 DirectShow 包括大量用于播放、转换和捕获许多不同媒体格式的现成筛选器但是开发人员可以生成自己的自定义筛選器以便处理自定义或标准数据格式。实现自定义筛选器时它可能是一个转换筛选器。它可能是一个将效果(如淡入或淡出)添加到视頻流的筛选器

DirectShow SDK 包括大量自定义筛选器,SDK 文档提供针对编写自定义筛选器的优秀介绍以下来自 SDK 文档的摘要提供创建转换筛选器的基本步驟:

  • 确定筛选器是必须复制媒体示例还是适当地处理它们。媒体流中进行的复制越少越好然而,某些筛选器需要一个复制操作;该要求影响基类的选择

  • 确定使用哪些基类并从基类派生筛选器类(如果需要,也可以派生针类)在该步骤中,为筛选器创建一个或多个标头在许多情况中,可以使用转换基类从正确的转换筛选器类派生类,以及重写几个成员函数在其他情况中,可以使用更通用的基类這些类实现了大部分的连接和协商机制;但这些类也提供在重写更多成员函数的开销方面的灵活性。

  • 添加实例化筛选器所需的代码该步驟需要将静态 CreateInstance 成员函数添加到派生的类中,该类还是一个全局数组包含筛选器名称、CLSID 和指向该成员函数的指针。

  • 调用 NonDelegatingQueryInterface 函数在您的筛选器Φ分布任何唯一的接口该步骤强调实现接口的 COM 方面,而不是基类中的其他方面

  • 重写基类成员函数。该步骤包括编写对于筛选器而言唯┅的转换函数以及重写连接过程所需的几个成员函数,如设置分配器大小或提供媒体类型

Windows Mobile 5.0 软件中针对多媒体的扩展支持可以增强您的託管和本机应用程序,诸如图片选择和照相机捕获对话框这样的高级构造可以轻松集成到应用程序中对于许多高级媒体播放方案,媒体播放器控件是一个有效的选择要获取更多的控制和灵活性,DirectShow API 提供低级别功能来捕获、解码、呈现和转换视频和音频流使用这些资源,您可以实现用户需要的多媒体要求

我要回帖

更多关于 中国移动怎么样 的文章

 

随机推荐