管理视频编辑项目
[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayer、 IMFMediaEngine 和 媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
[此 API 不受支持,将来可能会更改或不可用。]
以下提示将帮助你管理 DirectShow 编辑服务中的项目。
对时间线的更改
- 如果在生成筛选器图后更改时间线,请再次调用 IRenderEngine::ConnectFrontEnd 以重新生成前端。 通常,这不会影响图形的其余部分。 但有时,呈现引擎需要先删除整个图形,然后才能重新生成前端。 (例如,如果添加或删除 group,则会发生此情况。) ConnectFrontEnd 方法返回S_WARN_OUTPUTRESET以指示它删除了图形。 如果发生这种情况,应用程序必须重新生成图形的呈现部分。
- 若要从时间线中完全删除所有对象,请调用 IAMTimeline::ClearAllGroups 方法。
清理
- 使用完呈现引擎后,调用 IRenderEngine::ScrapIt 方法。 与任何 COM 对象一样,请确保在使用完每个接口指针后释放它。
- 呈现引擎不保留时间线的引用计数。 请勿在使用完时间线之前将其释放,并始终先在呈现引擎上调用 ScrapIt。
- 如果释放对时间线的所有引用,请不要使用该时间线中的任何对象,即使你持有引用计数也是如此。
多个时间线实例
- 不要在时间线之间移动时间线对象。 时间线中的每个对象都必须由该时间线创建。 时间线保存一个内部缓存,其中包含有关它所创建的对象的信息;移动时间线对象可能会中断缓存。
- 切勿使用具有多个时间线的同一个呈现引擎实例。 呈现引擎保存一个缓存,其中包含有关时间线的信息。 多个时间线会中断缓存并导致不可预知的结果。 如果需要两个活动时间线,请为每个时间线创建单独的呈现引擎实例。
- 时间线可以使用多个呈现引擎,但不能同时使用。 在使用另一个呈现引擎之前,请删除旧的呈现引擎。 (从使用基本呈现引擎进行预览到使用智能呈现引擎进行文件写入时,通常会执行此操作。)
持久性
- 将项目保存到 XML 文件时,筛选器图不是永久性的。 因此,将丢失与智能再压缩、压缩格式或压缩参数相关的任何信息。 应用程序在加载项目后还原这些参数由应用程序决定。
相关主题