在 DES 中编写 Windows 媒体文件
[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 MediaPlayer、 IMFMediaEngine 和 音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
[此 API 不受支持,将来可能会更改或不可用。]
本部分介绍如何使用 DirectShow Editing Services (DES) 编写 Windows 媒体文件。
重要
请勿使用智能呈现引擎来写入 Windows Media 文件。 始终使用基本呈现引擎 (CLSID_RenderEngine) 。
若要编写 Windows Media 文件,请执行以下操作:
使用指向密钥提供程序的指针在呈现引擎上调用 SetSite 。
生成图形的前端。 (请参阅 呈现 Project.)
创建 WM ASF 编写器 筛选器并将其添加到图中。
使用 WM ASF 编写器筛选器上的 IFileSinkFilter 接口来设置文件名。
将 WM ASF 编写器配置为使用 Windows 媒体配置文件。 每个配置文件都有预定义的流数。 必须选择与项目中的组匹配的配置文件。
IConfigAsfWriter 接口包含一些用于设置配置文件的不同方法。 例如, ConfigureFilterUsingProfileGuid 方法将系统配置文件指定为 GUID。 或者,可以使用 Windows Media Format 方法获取 IWMProfile 指针,然后调用 IConfigAsfWriter::ConfigureFilterUsingProfile。 有关详细信息,请参阅 配置 ASF 编写器。
将前端连接到 ASF 编写器。 图形的前端包含每个组的一个输出引脚。 假设你指定了兼容的配置文件,ASF 编写器应具有一组匹配的输入引脚。 将每个输出引脚连接到相应的输入引脚。 执行此操作的最简单方法是使用 ICaptureGraphBuilder2::RenderStream 方法。 首先,创建 捕获图形生成器 的新实例,并使用指向 Filter Graph Manager 的指针对其进行初始化:
ICaptureGraphBuilder2 *pBuild = 0; hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, 0, CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2, (void**)&pBuild); pBuild->SetFiltergraph(pGraph);
接下来,通过调用 IRenderEngine::GetGroupOutputPin 方法检索每个组的输出引脚。 调用 RenderStream 以将引脚连接到 ASF 编写器:
long cGroups = 0; hr = pTimeline->GetGroupCount(&cGroups); for (long i = 0; i < cGroups; i++) { IPin *pPin; hr = pRenderEngine->GetGroupOutputPin(i, &pPin); if (SUCCEEDED(hr)) { hr = pBuild->RenderStream(0, 0, pPin, 0, pASF); } pPin->Release(); } pBuild->Release
相关主题