iOS

最近更新时间:2025-12-23 16:43:42

我的收藏

功能概览

TAVEditor SDK 提供视频编辑功能,支持预览、剪同款、短视频剪辑等操作,可添加视频/图片资源,设置播放区间、音量、速度等参数。支持播放控制、画布尺寸调整和资源管理。导出功能支持快速和自定义配置,包括分辨率、帧率等设置。

预览功能

预览操作和参数

/// 初始化预览播放器
/// - Parameter param: 需要给一个父容器和渲染方式
- (void)setPreview:(TAVPreviewParam *)param;

/// 设置循环播放
/// - Parameter isLoop: 是否循环播放
- (void)setPlayLoop:(BOOL)isLoop;
- (BOOL)isPlayLoop;

/// 播放
- (void)play;

/// 从某个时间开始播放
/// - Parameter time: 开始播放时间
- (void)playAtTime:(CMTime)time;

/// 暂停
- (void)pause;

/// 停止
- (void)stop;

/// 刷新预览播放器
- (void)refresh;

//- (void)replay;

/// seek到指定时间播放
/// - Parameter seekTime: 指定的播放时间
- (void)seekToTime:(CMTime)seekTime;

/// seek到指定时间播放
/// - Parameters:
/// - seekTime: 指定的播放时间
/// - completion: seek完成回调
- (void)seekToTime:(CMTime)seekTime completion:(void (^)(BOOL finished))completion;

/// 释放播放器
- (void)destoryPlayer;

/// 获取预览总时长(添加资源后需要调用flushImmediately后才能准确获取)
- (CMTime)getTotalDuration;

/// 主轨道总时长(添加资源后,可即时获取时长)
- (NSTimeInterval)duration;

/// 是否在播放中
- (BOOL)isPlaying;

/// 当前播放的时间
- (NSTimeInterval)currentTime;
- (CMTime)currentCMTime;

/// 设置预览填充模式
/// - Parameter fillMode: 填充模式
- (void)setPlayerViewFillMode:(TAVPlayerFillMode)fillMode;

/// 获取播放器填充模式
- (TAVPlayerFillMode)playerViewFillMode;

/// 注册播放状态监听者
/// - Parameter observer: 监听者
- (void)registerPlayerObserver:(id<TAVEditorPlayerObserver>)observer;

/// 注销播放状态监听者
/// - Parameter observer: 监听者
- (void)resignObserver:(id<TAVEditorPlayerObserver>)observer;

// 设置当前渲染大小
- (void)setRenderSize:(CGSize)renderSize;
/// 获取当前渲染大小
- (CGSize)getRenderSize;

//- (void)setPainting:(int)fillModel color:(NSString *)hexColor;

/// 获取当前播放器的完整avaseet
- (AVAsset *)currentAVAsset;
/// 获取当前播放器的完整videoComposition
- (AVVideoComposition *)currentComposition;

资源管理

/// 向末尾添加视频资源
/// - Parameter path: 视频素材路径
/// - return 返回成功添加后的索引
- (int)addVideoClip:(NSString *)path;

/// 指定位置添加视频资源
/// - Parameters:
/// - paths: 视频资源路径数组
/// - index: 添加的位置
- (int)addVideoClips:(NSArray *)paths index:(int)index;

/// 相末尾添加图片资源
/// - Parameters:
/// - path: 图片资源路径
/// - duration: 图片素材展示的时间,传kCMTimeZero为默认3s
- (int)addImageClip:(NSString *)path duration:(CMTime)duration;

/// 在指定位置添加图片资源
/// - Parameters:
/// - path: 图片资源路径
/// - index: 插入位置
/// - durations: 展示时长,单位为秒,传@(0)为默认3s
- (int)addImageClips:(NSArray<NSString *> *)paths index:(int)index durations:(NSArray<NSNumber *> *)durations;

/// 获取当前正在编辑的资源数量
/// @return 资源数量
- (int)getClipCount;

/// 获取当前使用资源信息
- (NSArray<TAVClipInfo *> *)getClipInfos;

/// 移除指定位置的视频或者图片资源
/// - Parameter index: 资源下标
- (void)removeClip:(int)index;

/// 删除所有资源(视频/图片/模板)片段
- (void)removeAllClip;

/// 清空所有资源(video & bgm)和所有特效(sticker & filter & motion)
- (void)clearAll;

/// 修改指定资源的时长
/// - Parameters:
/// - timeRange: 资源播放区间
/// - index: 资源下标
- (void)setClipRange:(CMTimeRange)timeRange index:(int)index;

/// 修改指定资源的速率
/// - Parameters:
/// - speed: 速率 (0,3]
/// - index: 资源下标
- (void)setClipSpeed:(CGFloat)speed index:(int)index;

/// 调整资源位置
/// - Parameters:
/// - oldIndex: 调整前下标
/// - newIndex: 调整后下标
- (BOOL)updateClipIndex:(int)oldIndex toIndex:(int)newIndex;

/// 在改变资源/BGM后需要调用此接口重新生成播放资源
/// 该方法逻辑:1、同步生成播放器资源。2、播放器绑定资源。3、还原状态(异步):播放状态、播放时时间。
/// 由于该方法存在异步状态,调用完此方法后立马执行播放器的获取时间/是否正在播放等操作可能会出错,需要在第二个参数的completion内再获取。
- (void)flushImmediately;
- (void)flushImmediatelyCompletion:(void (^)(BOOL finished))completion;

/// flushImmediately分别执行以下两步,因为flushImmediately是耗时操作,主要耗时在preparePlayerItem方法内。
/// 故将方法单独抽离出来,供业务更精细化处理耗时问题,可以分别调用以下两个方法达成与flushImmediately相同的操作
- (AVPlayerItem *)preparePlayerItem;
- (void)bindPlayerItem:(AVPlayerItem *)playerItem completion:(void (^)(BOOL finished))completion;

/// 设置指定资源背景音量
/// - Parameters:
/// - volume: 音量0-1f
/// - index: 资源下标
- (void)setClipVolume:(float)volume index:(int)index;

/// 设置所有资源背景音量
/// - Parameters:
/// - volume: 音量0-1f
- (void)setAllClipsVolume:(float)volume;

/// 获取对应下标资源音量
/// - Parameter index: 资源
- (float)getClipVolume:(int)index;

/// 设置视频是否倒放 todo
- (void)setReverse:(BOOL)isReverse;

/// 设置视频旋转角度 按照顺时针旋转
/// - Parameter rotation: 顺时针旋转角度 0-360
- (void)setClipsRotation:(int)rotation;

/// 根据下标设置视频旋转角度
/// - Parameters:
/// - rotation: 顺时针旋转角度 0-360
/// - index: 资源下标
- (void)setClipRotation:(int)rotation index:(int)index;
/// 设置资源形变
- (void)setClipTransform:(CGAffineTransform)transform;
- (void)setClipTransform:(CGAffineTransform)transform index:(int)index;
- (void)setClipSize:(CGSize)size;
- (void)setClipSize:(CGSize)size index:(int)index;
- (void)setCropInfo:(TAVMediaAssetCropInfo *)cropInfo index:(int)index;

使用示例

/* 预览初始化 */
TAVPreviewParam *previewParam = [[TAVPreviewParam alloc] init];
// 预览展示的容器
previewParam.videoView = [(TAVPreviewView *)_previewView playerView];
previewParam.fillModel = TAVPlayerFillModeAspectFit;
previewParam.observer = self;
previewParam.widgetContentView = self.widgetContentView;
[self.editor setPreview:previewParam];

/* 添加数据源 */
// 添加视频资源
[editor addVideoClip:@"视频路径"];
// 添加图片资源
[editor addImageClip:imageUrl.path duration:kCMTimeZero];
// 刷新当前帧让资源生效
[editor flushImmediately];

导出功能

/// 生成并导出视频
/// - Parameters:
/// - exportConfig: 导出视频配置,传nil使用默认配置(分辨率使用预览分辨率、帧数为30、码率为8*1000*1000)
/// - progressBlock: 导出视频进度回调
/// - completion: 导出视频完成回调
- (void)generateVideo:(TAVEditorGenerateConfig *)config
outputPath:(NSString *)outputPath
progress:(void (^)(CGFloat progress))progressBlock
completion:(void (^)(NSError *error, NSString *outputPath))completion;

/// 生成并导出视频
/// - Parameters:
/// - TAVVideoCompressed: 导出分辨率
/// - progressBlock: 导出视频进度回调
/// - completion: 导出视频完成回调
- (void)generateVideoWithCompressed:(TAVVideoCompressed)compressed
outputPath:(NSString *)outputPath
progress:(void (^)(CGFloat progress))progressBlock
completion:(void (^)(NSError *error, NSString *outputPath))completion;

/// 快速生成并导出视频
/// - Parameters:
/// - exportConfig: 导出视频配置,传nil使用默认配置(分辨率使用预览分辨率、帧数为30、码率为8*1000*1000)
/// - progressBlock: 导出视频进度回调
/// - completion: 导出视频完成回调
- (void)quickGenerateVideo:(TAVEditorGenerateConfig *)config
outputPath:(NSString *)outputPath
progress:(void (^)(CGFloat progress))progressBlock
completion:(void (^)(NSError *error, NSString *outputPath))completion;

/// 快速生成并导出视频
/// - Parameters:
/// - TAVVideoCompressed: 导出分辨率
/// - progressBlock: 导出视频进度回调
/// - completion: 导出视频完成回调
- (void)quickGenerateVideoWithCompressed:(TAVVideoCompressed)compressed
outputPath:(NSString *)outputPath
progress:(void (^)(CGFloat progress))progressBlock
completion:(void (^)(NSError *error, NSString *outputPath))completion;

/// 取消生成视频
/// - Parameter completion: 取消完成回调
- (void)cancelGenerate:(void(^ __nullable)(void))completion;

/// 暂停导出
- (void)pauseGenerate;

/// 继续导出
- (void)resumeGenerate;