将 Windows Media 与 DirectShow 编辑服务配合使用

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

[此 API 不受支持,将来可能会更改或不可用。]

本部分介绍如何在 DirectShow Editing Services (DES) 应用程序中使用基于 Windows 媒体的内容。 有两种main方案:

  • 源剪辑。 DES 项目可以包含 Windows Media 文件中的音频和视频剪辑。
  • 目标格式。 Windows Media 是视频编辑项目最终输出的理想格式。

若要使用 Windows Media 文件,应用程序必须提供软件证书(也称为密钥)。 它通过实现密钥提供程序对象来实现此目的。 密钥提供程序是公开 IServiceProvider 接口的 COM 对象。 有关实现密钥提供程序的信息,请参阅 解锁 Windows 媒体格式 SDK

若要将 DES 与 Windows Media 文件一起使用,以下 DES 对象需要软件密钥:

  • 呈现引擎,用于预览或文件写入。

  • MediaDet 对象,用于从 ASF 文件获取视频帧或媒体类型。

  • ![重要提示]

    请勿使用智能呈现引擎读取或写入 Windows Media 文件。 始终使用基本呈现引擎 (CLSID_RenderEngine) 。

     

若要为对象提供软件密钥,请查询该对象以获取 IObjectWithSite 接口,并使用指向密钥提供程序的指针调用 IObjectWithSite::SetSite 。 例如,以下代码为呈现引擎提供软件密钥:

// Create your key provider, using an application-defined function:
IServiceProvider *pKey;
hr = MyCreateKeyProviderFunction(&pKey);  

// Query the Render Engine for IObjectWithSite.
IObjectWithSite *pOWS;
hr = pRenderEngine->QueryInterface(__uuidof(IObjectWithSite), 
    reinterpret_cast<void**>(&pOWS));
if (SUCCEEDED(hr))
{
    // Give it your key provider.
    hr = pOWS->SetSite(pKey);
    pOWS->Release();
}
pKey->Release();

若要在 DES 项目中使用 Windows Media 源剪辑,只需使用指向密钥提供程序的指针在呈现引擎上调用 IObjectWithSite::SetSite

有关编写 Windows Media 文件的信息,请参阅 在 DES 中编写 Windows Media 文件

使用 DirectShow 编辑服务