管理视频编辑项目

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

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

以下提示将帮助你管理 DirectShow 编辑服务中的项目。

对时间线的更改

  • 如果在生成筛选器图后更改时间线,请再次调用 IRenderEngine::ConnectFrontEnd 以重新生成前端。 通常,这不会影响图形的其余部分。 但有时,呈现引擎需要先删除整个图形,然后才能重新生成前端。 (例如,如果添加或删除 group,则会发生此情况。) ConnectFrontEnd 方法返回S_WARN_OUTPUTRESET以指示它删除了图形。 如果发生这种情况,应用程序必须重新生成图形的呈现部分。
  • 若要从时间线中完全删除所有对象,请调用 IAMTimeline::ClearAllGroups 方法。

清理

  • 使用完呈现引擎后,调用 IRenderEngine::ScrapIt 方法。 与任何 COM 对象一样,请确保在使用完每个接口指针后释放它。
  • 呈现引擎不保留时间线的引用计数。 请勿在使用完时间线之前将其释放,并始终先在呈现引擎上调用 ScrapIt
  • 如果释放对时间线的所有引用,请不要使用该时间线中的任何对象,即使你持有引用计数也是如此。

多个时间线实例

  • 不要在时间线之间移动时间线对象。 时间线中的每个对象都必须由该时间线创建。 时间线保存一个内部缓存,其中包含有关它所创建的对象的信息;移动时间线对象可能会中断缓存。
  • 切勿使用具有多个时间线的同一个呈现引擎实例。 呈现引擎保存一个缓存,其中包含有关时间线的信息。 多个时间线会中断缓存并导致不可预知的结果。 如果需要两个活动时间线,请为每个时间线创建单独的呈现引擎实例。
  • 时间线可以使用多个呈现引擎,但不能同时使用。 在使用另一个呈现引擎之前,请删除旧的呈现引擎。 (从使用基本呈现引擎进行预览到使用智能呈现引擎进行文件写入时,通常会执行此操作。)

持久性

  • 将项目保存到 XML 文件时,筛选器图不是永久性的。 因此,将丢失与智能再压缩、压缩格式或压缩参数相关的任何信息。 应用程序在加载项目后还原这些参数由应用程序决定。

使用 DirectShow 编辑服务