加载项目文件
[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayer、 IMFMediaEngine 和 媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
[此 API 不受支持,将来可能会更改或不可用。]
若要加载项目文件,需要两个组件:XML 分析器和空时间线。 XML 分析程序读取 XML 项目文件,并创建文件中定义的每个对象。 然后,它将对象插入时间线并设置任何时间线属性,例如默认帧速率。 下面的代码示例加载文件。
HRESULT hr;
IAMTimeline *pTL = NULL;
IXml2Dex *pXML = NULL;
hr = CoCreateInstance(CLSID_AMTimeline, NULL, CLSCTX_INPROC_SERVER,
IID_IAMTimeline, (void**)&pTL);
hr = CoCreateInstance(CLSID_Xml2Dex, NULL, CLSCTX_INPROC_SERVER,
IID_IXml2Dex, (void**)&pXML);
BSTR bstrFile = SysAllocStringLen(OLESTR("C:\\example.xtl"), 15);
hr = pXML->ReadXMLFile(pTL, bstrFile);
SysFreeString(bstrFile);
pXML->Release();
分析程序公开 IXml2Dex 接口,其中包含用于加载和保存项目文件的方法。 时间线公开 IAMTimeline 接口,该接口包含用于操作时间线和创建新的时间线对象的方法。 调用 CoCreateInstance 函数以创建每个组件,如下所示。 请记住,通过创建新实例,可以递增接口上的引用计数。 若要避免内存泄漏,请在使用接口时始终释放该接口。 在此示例中,不再需要指向 IXml2Dex 的指针,因此可以释放 接口。 预览时间线仍然需要指向 IAMTimeline 的指针。
IXml2Dex::ReadXMLFile 方法读取指定的文件,并使用文件中定义的对象填充时间线。 文件名是使用 BSTR 值指定的。 为了缩短示例,示例中的文件名以文本字符串的形式提供。 通常,可以从“打开文件”对话框或类似内容获取它。
如果 ReadXML 方法成功,则返回成功代码。 否则,它将返回错误代码,如 VFW_E_INVALID_FILE_FORMAT。 始终检查返回值,以便正常处理错误条件。 同样,为简洁起见,示例代码不会检查错误。
相关主题