OC之插入,移除和缩放轨道片段AVCompositionTrack

一、不可变对象AVCompositionTrack

AVCompositionTrack 继承自AVAssetTrack,该对象中的轨道,由媒体类型,轨道标识符和轨道片段组成。

合成轨道中第一个轨道段的target.timeRange.startkCMTimeZero,每个后续轨道段的target.timeRange.start等于CMTimeRangeGetEnd(target.timeRange)

//合成轨道的轨道段。
@property(nonatomic, readonly, copy) NSArray *segments;

- (AVCompositionTrackSegment *)segmentForTrackTime:(CMTime)trackTime;

AVFoundation框架还提供了一个可变子类AVMutableCompositionTrack


二、可变对象AVMutableCompositionTrack

AVMutableCompositionTrack 继承自AVCompositionTrack,合成对象中的可变轨道,用于插入,移除和缩放轨道片段,而不会影响其低级别表示。

AVCompositionTrack定义了轨道段时间对齐的约束。如果在可变组合中设置轨道段数组,则可以使用-validateTrackSegments:error:测试这些段是否满足约束条件。

1、管理时间范围

1.1、扩展空时间范围
- (void)insertEmptyTimeRange:(CMTimeRange)timeRange;

在接收器中添加或扩展空时间范围:

  • 参数timeRange:要插入的空时间范围。

如果在轨道中插入空的时间范围,则在插入之前的该间隔期间显示的任何媒体将立即显示。
插入数据的性质取决于轨道的媒体类型;例如,声道中的空时间范围呈现静音。

1.2、插入源轨道的时间范围
- (BOOL)insertTimeRange:(CMTimeRange)timeRange
ofTrack:(AVAssetTrack *)track
atTime:(CMTime)startTime
error:(NSError * _Nullable *)outError;
  • 参数timeRange:要插入的轨道的时间范围。
  • 参数track:要插入的源轨道。
  • 参数startTime:由合成轨道表示的轨道出现的时间。
  • 参数outError:如果未成功插入track,则返回NSError
  • 返回值:如果已成功插入轨道,则为YES,否则为NO。

默认情况下,插入轨道的时间范围以其自然持续时间和速率显示。可以使用-scaleTimeRange:toDuration:将其缩放到不同的持续时间(以便以不同的速率显示)。
例如,如果尝试插入的AVAsset受到复制保护的限制,则插入可能会失败。

1.3、将多个源轨道的timeRanges插入到合成轨道中
- (BOOL)insertTimeRanges:(NSArray *)timeRanges
ofTracks:(NSArray *)tracks
atTime:(CMTime)startTime
error:(NSError * _Nullable *)outError;
  • 参数timeRanges:包含CMTimeRange结构的NSValue对象数组,指示要插入的时间范围。
  • 参数tracks:要插入的源轨道。仅支持AVURLAsset实例。
  • 参数startTime:插入轨道由合成轨道呈现的时间。
  • 参数outError:发生错误时,返回NSError;例如,选择插入合成中的资源受到复制保护的限制。
  • 返回值:如果插入成功则为YES,否则为NO。

对于每个timeRange/track对,此方法等效于调用-insertTimeRange:ofTrack:atTime:error:
如果此方法返回错误,则不会将任何时间范围插入合成轨道。
要指定空时间范围,请为轨道传递NSNull对象,并以kCMTimeInvalid开始时间范围,并使用所需空编辑的持续时间。

1.4、移除指定的时间范围
- (void)removeTimeRange:(CMTimeRange)timeRange;
  • 参数timeRange:要删除的时间范围。

删除时间范围不会导致从合成中删除轨道。相反,它会删除或截断与时间范围相交的轨道段。

1.5、更改持续时间
- (void)scaleTimeRange:(CMTimeRange)timeRange
toDuration:(CMTime)duration;

更改接收器中时间范围的持续时间:

  • 参数timeRange:要缩放的轨道的时间范围。
  • 参数duration:新的持续时间范围。

受缩放操作影响的每个轨道段将以等于其结果timeMappingsource.duration/target.duration的速率呈现。

1.6、合成轨道的轨道段

合成轨道的轨道段数组。

@property(nonatomic, copy) NSArray *segments;

合成轨道中第一个轨道段的target.timeRange.start必须是kCMTimeZero,并且每个后续轨道段的target.timeRange.start必须等于CMTimeRangeGetEnd(target.timeRange)。可以使用-validateTrackSegments:error:确保轨道段数组符合此规则。

2、验证片断

返回一个布尔值,指示给定的轨道段数组是否符合合成轨道的时间规则。

- (BOOL)validateTrackSegments:(NSArray *)trackSegments
error:(NSError * _Nullable *)outError;

可以使用此方法确保轨道段数组适合设置为segments属性的值。合成轨道中第一个轨道段的target.timeRange.start必须是kCMTimeZero,并且每个后续轨道段的target.timeRange.start必须等于CMTimeRangeGetEnd(target.timeRange)
如果要修改现有的段数组,可以创建它的可变副本,修改可变数组,然后使用此方法验证可变数组。

3、配置轨道属性

属性 数据类型 描述
languageCode NSString 与轨道相关的语言为ISO 639-2/T;默认为nil
extendedLanguageTag NSString 与轨道关联的语言标记为RFC 4646;默认为nil
naturalTimeScale CMTimeScale 不需要额外的数值转换就可以对轨道的时间值进行操作的时间尺度。如果没有设置,则该值为第一个非空编辑的自然时间尺度,如果没有非空编辑,则为600。将值设置为0以恢复为默认行为。
preferredTransform CGAffineTransform 视频数据的首选转换用于显示目的;默认为CGAffineTransformIdentity
preferredVolume float 可听媒体数据的首选音量;默认为1.0。

4、实例方法

- (void)addTrackAssociationToTrack:(AVCompositionTrack *)compositionTrack
type:(AVTrackAssociationType)trackAssociationType;


- (void)removeTrackAssociationToTrack:(AVCompositionTrack *)compositionTrack
type:(AVTrackAssociationType)trackAssociationType;

你可能感兴趣的:(OC之插入,移除和缩放轨道片段AVCompositionTrack)