创建组组合和跟踪

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

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

组、合成和曲目是时间线和源剪辑之间的中间层。 它们通过可包含的对象类型进行区分。

  • 跟踪包含源对象。
  • 合成包含曲目和其他合成,但不包含源对象。
  • 组是顶级组合。 组包含合成和曲目,但合成不能包含组。
  • 虚拟轨道是可以驻留在组合或组中的任何对象。 这包括曲目和合成。

这些对象公开以下接口:

接口 公开者
IAMTimelineTrack 轨迹
IAMTimelineVirtualTrack 曲目、合成
IAMTimelineComp 合成、组
IAMTimelineGroup

 

这些接口包含用于将对象添加到时间线的方法。

例如,以下代码将新曲目插入组中。 如上表所示,组被视为一种组合,轨道是一种虚拟轨道。因此,若要将轨迹插入组,必须查询组的 IAMTimelineComp 接口,并调用 IAMTimelineComp::VTrackInsBefore 方法。

IAMTimelineGroup    *pGroup;
// Create a new group (not shown). 

IAMTimelineComp     *pComp = NULL;
IAMTimelineObj      *pTrackObj = NULL;

pTL->CreateEmptyNode(&pTrackObj, TIMELINE_MAJOR_TYPE_TRACK);
pGroup->QueryInterface(IID_IAMTimelineComp, (void **)&pComp);
pComp->VTrackInsBefore(pTrackObj, 0);

VTrackInsBefore 的第二个参数指定虚拟轨道的优先级。优先级从零开始。 如果指定值 –1,则会将虚拟轨道插入到优先级列表的末尾。 如果指定一个值,其中已经有一个虚拟轨道,则从该点开始的所有内容将在列表中向下移动一个优先级。 不要以大于虚拟轨道数的优先级插入虚拟轨道,因为这将导致未定义的行为。

若要从时间线永久删除对象,请对对象调用 IAMTimelineObj::RemoveAll。 此方法删除 对象及其所有子级。 若要删除对象以将其重新插入时间线中的其他位置,请改为调用 IAMTimelineObj::Remove。 与 RemoveAll 不同,此方法不会删除对象的子级。 若要从时间线中删除所有内容,请调用 IAMTimeline::ClearAllGroups

构造时间线