功能概览
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 *)configoutputPath:(NSString *)outputPathprogress:(void (^)(CGFloat progress))progressBlockcompletion:(void (^)(NSError *error, NSString *outputPath))completion;/// 生成并导出视频/// - Parameters:/// - TAVVideoCompressed: 导出分辨率/// - progressBlock: 导出视频进度回调/// - completion: 导出视频完成回调- (void)generateVideoWithCompressed:(TAVVideoCompressed)compressedoutputPath:(NSString *)outputPathprogress:(void (^)(CGFloat progress))progressBlockcompletion:(void (^)(NSError *error, NSString *outputPath))completion;/// 快速生成并导出视频/// - Parameters:/// - exportConfig: 导出视频配置,传nil使用默认配置(分辨率使用预览分辨率、帧数为30、码率为8*1000*1000)/// - progressBlock: 导出视频进度回调/// - completion: 导出视频完成回调- (void)quickGenerateVideo:(TAVEditorGenerateConfig *)configoutputPath:(NSString *)outputPathprogress:(void (^)(CGFloat progress))progressBlockcompletion:(void (^)(NSError *error, NSString *outputPath))completion;/// 快速生成并导出视频/// - Parameters:/// - TAVVideoCompressed: 导出分辨率/// - progressBlock: 导出视频进度回调/// - completion: 导出视频完成回调- (void)quickGenerateVideoWithCompressed:(TAVVideoCompressed)compressedoutputPath:(NSString *)outputPathprogress:(void (^)(CGFloat progress))progressBlockcompletion:(void (^)(NSError *error, NSString *outputPath))completion;/// 取消生成视频/// - Parameter completion: 取消完成回调- (void)cancelGenerate:(void(^ __nullable)(void))completion;/// 暂停导出- (void)pauseGenerate;/// 继续导出- (void)resumeGenerate;