创建组组合和跟踪
[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayer、 IMFMediaEngine 和 媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
[此 API 不受支持,将来可能会更改或不可用。]
组、合成和曲目是时间线和源剪辑之间的中间层。 它们通过可包含的对象类型进行区分。
- 跟踪包含源对象。
- 合成包含曲目和其他合成,但不包含源对象。
- 组是顶级组合。 组包含合成和曲目,但合成不能包含组。
- 虚拟轨道是可以驻留在组合或组中的任何对象。 这包括曲目和合成。
这些对象公开以下接口:
接口 | 公开者 |
---|---|
IAMTimelineTrack | 轨迹 |
IAMTimelineVirtualTrack | 曲目、合成 |
IAMTimelineComp | 合成、组 |
IAMTimelineGroup | 组 |
这些接口包含用于将对象添加到时间线的方法。
- IAMTimeline::AddGroup:将组插入时间线。
- IAMTimelineComp::VTrackInsBefore:将虚拟轨道插入合成或组。
- IAMTimelineTrack::SrcAdd:将源插入轨道。
例如,以下代码将新曲目插入组中。 如上表所示,组被视为一种组合,轨道是一种虚拟轨道。因此,若要将轨迹插入组,必须查询组的 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。
相关主题