将 Windows Media 与 DirectShow 编辑服务配合使用
[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 MediaPlayer、 IMFMediaEngine 和 音频/视频捕获 ,而不是 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 文件。
相关主题