在应用程序中使用多媒体流

[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayerIMFMediaEngine媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

注意

这些 API 已弃用。 应用程序应使用 示例抓取器 筛选器或实现自定义筛选器,以从 DirectShow 筛选器图中获取数据。

 

多媒体流式处理接口通过消除对硬件或软件源特定特征的依赖并为所有 Microsoft DirectX® 媒体格式提供支持,大大简化了处理多媒体数据的过程。 流将数据抽象化到非常高的级别;应用程序甚至可以将数据从一个流移动到另一个流,而无需了解数据的格式。

执行以下步骤来创建多媒体流。

  1. 创建多媒体流。 流的创建和初始化方法是特定于体系结构的。 DirectShow 支持 IAMMultiMediaStream 接口,该接口用于初始化流。 IMultiMediaStream 的其他进程内服务器实现将使用不同的机制创建和初始化。
  2. 初始化多媒体流对象后,应用程序将使用 QueryInterface 检索对象的 IMultiMediaStream 接口。 使用此接口可以确定流的属性并枚举流本身。 可以通过调用具有特定用途 ID 的 IMultiMediaStream::GetMediaStream 方法来检索特定流。 表示主要视频和音频流的MSPID_PrimaryVideo和MSPID_PrimaryAudio是最常用的用途 ID。
  3. 为特定于流的媒体类型的接口调用 IUnknown::QueryInterface 。 例如,如果要呈现视频流,请检索其 IDirectDrawMediaStream 接口。 特定于媒体的接口定义充分利用格式功能所需的其他方法。
  4. 从流数据创建一个或多个示例。 每个媒体流都支持用于创建示例的 IMediaStream::CreateSharedSample 方法。 生成的示例支持 IStreamSample 接口,该接口提供对示例及其特征的控制。 通常,媒体流支持特定于格式的示例创建方法,该方法比上述 IStreamSample 方法更强大。 例如,IDirectDrawMediaStream 可以创建附加到所需 DirectDraw 图面和剪裁矩形的示例。 但是,在某些情况下,必须在不知道数据格式的情况下处理数据。 如果要独立于其格式流式传输数据,请使用 IMediaStream::CreateSharedSample 方法创建数据示例。
  5. 创建所有所需的流样本后,通过调用 IMultiMediaStream::SetState 方法启动流,并传入 STREAMSTATE_RUN 标志作为其参数。
  6. 调用 IStreamSample::Update 以更新流示例。 当 IStreamSample::Update 方法退出时,可以访问示例的数据。 如果需要在更新返回时触发特定事件或函数调用,请将相应的指针传递给 IStreamSample::Update 方法。

有关多媒体流式处理接口的详细信息,请参阅 多媒体流式处理