TXVideoEditer.h 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545
  1. //
  2. // TXUGCEdit.h
  3. // TXRTMPSDK
  4. //
  5. // Created by xiang zhang on 2017/4/10.
  6. //
  7. //
  8. #import <Foundation/Foundation.h>
  9. #import <AVFoundation/AVFoundation.h>
  10. #import <UIKit/UIKit.h>
  11. #import <CoreMedia/CoreMedia.h>
  12. #import "TXVideoEditerListener.h"
  13. #import "TXVideoEditerTypeDef.h"
  14. #import "TXVideoCustomProcessDelegate.h"
  15. ////////////////////////////////////////////////////////////////////////////////////////////////////
  16. //////////////////////////////////////////// UGC list /////////////////////////////////////////////
  17. ////////////////////////////////////////////////////////////////////////////////////////////////////
  18. #pragma mark - 视频信息获取
  19. /// @defgroup TXVideoEditer_ios TXVideoEditer
  20. /// 视频信息获取类
  21. /// @{
  22. @interface TXVideoInfoReader : NSObject
  23. /**
  24. * @notice 1,如果当前image图片为nil,sdk会自动返回上一张image图片
  25. * 2,sampleProcess 回调不在主线程,如果在回调里面有UI操作,请自行切换到主线程,具体可以参考demo代码
  26. * @param number 当前采样的是第几张图片(number 从1开始)
  27. * @param image 当前采样图片
  28. * @return 是否继续获取下一张图片,YES:继续获取 NO:终止获取
  29. */
  30. typedef BOOL(^sampleProcess)(int number , UIImage * image);
  31. /** 获取视频文件信息
  32. * @param videoPath 视频文件路径
  33. */
  34. + (TXVideoInfo *)getVideoInfo:(NSString *)videoPath;
  35. /** 获取视频文件信息
  36. * @param videoAsset 视频文件属性
  37. * @return 视频信息
  38. */
  39. + (TXVideoInfo *)getVideoInfoWithAsset:(AVAsset *)videoAsset;
  40. /** 获取视频的采样图列表
  41. * @param count 获取的采样图数量(均匀采样)
  42. * @param videoPath 视频文件路径
  43. * @param sampleProcess 采样进度
  44. */
  45. + (void)getSampleImages:(int)count
  46. videoPath:(NSString *)videoPath
  47. progress:(sampleProcess)sampleProcess;
  48. /** 获取视频的采样图列表
  49. * @param count 获取的采样图数量(均匀采样)
  50. * @param videoAsset 视频文件属性
  51. * @param sampleProcess 采样进度
  52. */
  53. + (void)getSampleImages:(int)count
  54. videoAsset:(AVAsset *)videoAsset
  55. progress:(sampleProcess)sampleProcess;
  56. /** 获取视频的采样图列表
  57. * @param count 获取的采样图数量(均匀采样)
  58. * @param maxSize 缩略图的最大大小,生成的缩略图大小不会超出这个宽高
  59. * @param videoAsset 视频文件属性
  60. * @param sampleProcess 采样进度
  61. */
  62. + (void)getSampleImages:(int)count
  63. maxSize:(CGSize)maxSize
  64. videoAsset:(AVAsset *)videoAsset
  65. progress:(sampleProcess)sampleProcess;
  66. /**
  67. * 根据时间获取单帧图片
  68. * @param time 获取图片的时间
  69. * @param videoPath 视频文件路径
  70. */
  71. + (UIImage *)getSampleImage:(float)time
  72. videoPath:(NSString *)videoPath;
  73. /**
  74. * 根据时间获取单帧图片
  75. * @param time 获取图片的时间
  76. * @param videoAsset 视频AVAsset对象
  77. */
  78. + (UIImage *)getSampleImage:(float)time
  79. videoAsset:(AVAsset *)videoAsset;
  80. /**
  81. * 根据时间列表获取缩略图列表
  82. * @param asset 视频文件对象
  83. * @param times 获取的时间列表
  84. * @param maxSize 缩略图大小
  85. */
  86. + (void)getSampleImagesFromAsset:(AVAsset *)asset
  87. times:(NSArray<NSNumber*> *)times
  88. maxSize:(CGSize)maxSize
  89. progress:(sampleProcess)sampleProcess;
  90. @end
  91. ////////////////////////////////////////////////////////////////////////////////////////////////////
  92. //////////////////////////////////////////// Video/Image Edit /////////////////////////////////////
  93. ////////////////////////////////////////////////////////////////////////////////////////////////////
  94. #pragma mark - 视频编辑
  95. /// 视频编辑类
  96. @interface TXVideoEditer : NSObject
  97. /// 生成视频回调的委托对象, 可以获取生成进度与完成时间等
  98. /// @see TXVideoGenerateListener
  99. @property (nonatomic ,weak) id<TXVideoGenerateListener> generateDelegate;
  100. /// 视频预览回调的委托对象,可以获取视频的播放进度等
  101. /// @see TXVideoPreviewListener
  102. @property (nonatomic ,weak) id<TXVideoPreviewListener> previewDelegate;
  103. /// 视频画面处理的委托对象,可以获取视频画面的OpenGL纹理ID [精简版不支持]
  104. /// @see TXVideoCustomProcessListener
  105. @property (nonatomic, weak) id<TXVideoCustomProcessListener> videoProcessDelegate;
  106. /// 判断是否支持TwoPass-Encoding [精简版不支持]
  107. @property (nonatomic, readonly) BOOL supportsTwoPassEncoding;
  108. /** 默认初始化方法
  109. * @param param 编辑器画面预览参数
  110. * @see TXPreviewParam
  111. */
  112. - (instancetype)initWithPreview:(TXPreviewParam *)param;
  113. #pragma mark 视频/图片设置相关方法
  114. /// @name 视频/图片设置相关方法
  115. /** Tips:
  116. * 4.7版本以后,SDK支持图片编辑,这里需要注意的是,只能单独对图片或则视频进行编辑,暂不支持图片和视频的混合编辑。
  117. * 视频编辑暂不支持的功能:转场动画
  118. * 图片编辑暂不支持的功能:重复,倒放,快速/慢速,片尾水印, 旋转
  119. */
  120. /**
  121. * 设置视频文件路径
  122. * @param videoPath 视频文件路径
  123. * @return 0:成功;-1:视频文件不存在;-2:暂不支持2个声道以上的视频编辑;-3:传入的视频和音频的时长均为0
  124. */
  125. - (int)setVideoPath:(NSString *)videoPath;
  126. /**
  127. * 设置视频 AVAsset
  128. * @param videoAsset 视频AVAsset对象,从本地相册loading出来的视频,可以直接传入对应的视频属性,会极大的降低视频从相册loading的时间,具体请参考demo用法
  129. * @return 0 成功;
  130. * -1 视频属性asset 为nil;
  131. * -2 视频不支持:暂不支持2个声道以上的视频编辑
  132. */
  133. - (int)setVideoAsset:(AVAsset *)videoAsset;
  134. /**
  135. * 设置转场图片列表 [精简版不支持]
  136. * @param pitureList 转场图片列表,至少设置三张图片 (tips :图片最好压缩到720P以下(参考demo用法),否则内存占用可能过大,导致编辑过程异常)
  137. * @param fps 转场图片生成视频后的fps (15 ~ 30)
  138. * @return 0 设置成功;
  139. * -1 设置失败,请检查图片列表是否存在,图片数量是否大于等于3张,fps是否正常;
  140. */
  141. - (int)setPictureList:(NSArray<UIImage *> *)pitureList fps:(int)fps;
  142. /**
  143. * 设置图片转场类型 [精简版不支持]
  144. * @param transitionType 转场类型,详情见 TXTransitionType
  145. * @param duration 转场视频时长(tips:同一个图片列表,每种转场动画的持续时间可能不一样,这里可以获取转场图片的持续时长);
  146. */
  147. - (void)setPictureTransition:(TXTransitionType)transitionType duration:(void(^)(CGFloat))duration;
  148. #pragma mark 预览逻辑相关
  149. /// @name 预览逻辑相关方法
  150. /** 渲染某一时刻的视频画面
  151. * @param time 预览帧时间(s)
  152. */
  153. - (void)previewAtTime:(CGFloat)time;
  154. /** 播放某一时间段的视频
  155. * @param startTime 播放起始时间(s)
  156. * @param endTime 播放结束时间(s)
  157. */
  158. - (void)startPlayFromTime:(CGFloat)startTime
  159. toTime:(CGFloat)endTime;
  160. /**
  161. * 暂停播放
  162. */
  163. - (void)pausePlay;
  164. /// 继续播放
  165. - (void)resumePlay;
  166. /// 停止播放
  167. - (void)stopPlay;
  168. #pragma mark 特效相关
  169. // @name 特效相关方法
  170. /**
  171. * 设置美颜,美白级别 0~9
  172. * @param beautyLevel 磨皮级别 0~9
  173. * @param whiteningLevel 美白级别 0~9
  174. */
  175. - (void) setBeautyFilter:(float)beautyLevel setWhiteningLevel:(float)whiteningLevel;
  176. /**
  177. * 设置特效滤镜
  178. * @param image 滤镜图片
  179. */
  180. - (void) setFilter:(UIImage *)image;
  181. /**
  182. * 设置两个滤镜效果
  183. * @param leftFilter 左滤镜图片(nil代表无左滤镜)
  184. * @param leftIntensity 左滤镜浓度
  185. * @param rightFilter 右滤镜图片(nil代表无右滤镜)
  186. * @param rightIntensity 右滤镜浓度
  187. * @param leftRatio 左滤镜所占比例
  188. */
  189. - (void)setFilter:(UIImage*)leftFilter leftIntensity:(CGFloat)leftIntensity rightFilter:(UIImage*)rightFilter rightIntensity:(CGFloat)rightIntensity leftRatio:(CGFloat)leftRatio;
  190. /**
  191. * 设置滤镜效果程度
  192. * @param specialRatio 从0到1,越大滤镜效果越明显,默认取值0.5
  193. */
  194. -(void) setSpecialRatio:(float)specialRatio;
  195. /**
  196. * 设置倒放 [精简版不支持]
  197. * @param isReverse 是否倒放
  198. */
  199. - (void) setReverse:(BOOL)isReverse;
  200. /**
  201. * 设置重复播放 [精简版不支持]
  202. * @param repeatList 重复播放的范围列表
  203. * @see TXRepeat
  204. */
  205. - (void) setRepeatPlay:(NSArray<TXRepeat *> *)repeatList;
  206. /**
  207. * 设置画面渲染角度 [精简版不支持]
  208. * @param rotation 画面渲染角度, 必须是90的倍数
  209. * @warning 只支持视频旋转
  210. */
  211. - (void)setRenderRotation:(int)rotation;
  212. /**
  213. * 设置视频加速播级别 [精简版不支持]
  214. * @param speedList 加速范围列表
  215. */
  216. - (void) setSpeedList:(NSArray<TXSpeed *> *)speedList;
  217. /**
  218. * 开始特效 [精简版不支持]
  219. * @param type 特效类型
  220. * @param startTime 特效开始时间
  221. */
  222. - (void) startEffect:(TXEffectType)type startTime:(float)startTime;
  223. /**
  224. * 结束特效 [精简版不支持]
  225. * @param type 特效类型
  226. * @param endTime 特效结束时间
  227. */
  228. - (void) stopEffect:(TXEffectType)type endTime:(float)endTime;
  229. /**
  230. * 删除最后一个添加的特效 [精简版不支持]
  231. */
  232. - (void) deleteLastEffect;
  233. /**
  234. * 删除所有特效 [精简版不支持]
  235. */
  236. - (void) deleteAllEffect;
  237. #pragma mark 贴纸相关
  238. /// @name 贴纸相关方法 [精简版不支持]
  239. /**
  240. * 设置字幕(气泡)列表 [精简版不支持]
  241. * @param subtitleList 字幕列表
  242. */
  243. - (void) setSubtitleList:(NSArray<TXSubtitle *> *)subtitleList;
  244. /**
  245. * 设置静态贴纸 [精简版不支持]
  246. * @param pasterList 静态贴纸列表
  247. */
  248. - (void) setPasterList:(NSArray<TXPaster *> *)pasterList;
  249. /**
  250. * 设置动图列表 [精简版不支持]
  251. * @param animatedPasterList 动态贴纸列表
  252. */
  253. - (void) setAnimatedPasterList:(NSArray<TXAnimatedPaster *> *)animatedPasterList;
  254. #pragma mark BGM相关
  255. /// @name BGM相关方法
  256. /**
  257. * 设置背景音乐 [精简版不支持]
  258. * @param path 音乐文件路径
  259. * @param result 0:成功, -1:音乐文件格式不支持
  260. */
  261. - (void) setBGM:(NSString *)path result:(void(^)(int))result;
  262. /**
  263. * 设置背景音乐 [精简版不支持]
  264. * @param asset 音乐AVAsset对象, 从系统媒体库loading出来的音乐,可以直接传入对应的音乐属性,会极大的降低音乐从系统媒体库loading的时间,具体请参考demo用法
  265. * @param result 0:成功, -1:音乐文件格式不支持
  266. */
  267. - (void) setBGMAsset:(AVAsset *)asset result:(void(^)(int))result;
  268. /**
  269. * 设置背景音乐的起始时间和结束时间 [精简版不支持]
  270. * @param startTime 音乐起始时间
  271. * @param endTime 音乐结束时间
  272. */
  273. - (void) setBGMStartTime:(float)startTime endTime:(float)endTime;
  274. /**
  275. * 设置背景音乐是否循环播放 [精简版不支持]
  276. * @param isLoop 是否循环播放
  277. */
  278. - (void) setBGMLoop:(BOOL)isLoop;
  279. /**
  280. * 设置背景音乐在视频的添加的起始位置 [精简版不支持]
  281. * @param time 背景音乐在视频的添加的起始时间
  282. */
  283. - (void) setBGMAtVideoTime:(float)time;
  284. /**
  285. * 设置视频声音大小 [精简版不支持]
  286. * @param volume 音量, 取值范围 0.0 ~ 1.0
  287. */
  288. - (void) setVideoVolume:(float)volume;
  289. /**
  290. * 设置背景音乐声音大小 [精简版不支持]
  291. * @param volume 背景音量, 取值范围 0.0 ~ 1.0
  292. */
  293. - (void) setBGMVolume:(float)volume;
  294. /**
  295. * 设置背景音淡入淡出
  296. * @param fadeInDuration 淡入持续时长 (s)
  297. * @param fadeOutDuration 淡出持续时长 (s)
  298. */
  299. - (void) setBGMFadeInDuration:(float)fadeInDuration fadeOutDuration:(float)fadeOutDuration;
  300. #pragma mark 水印相关
  301. /// @name 水印相关方法
  302. /**
  303. * 设置全局水印 [精简版不支持]
  304. * @param waterMark 全局水印图片
  305. * @param normalizationFrame 水印相对于视频图像的归一化frame,x,y,width,height 取值范围 0~1;
  306. * height不用设置,sdk内部会根据水印宽高比自动计算height;
  307. * 比如视频图像大小为(540,960) frame设置为(0.1,0.1,0.1,0),
  308. * 水印的实际像素坐标为(540 * 0.1,960 * 0.1,540 * 0.1 ,540 * 0.1 * waterMark.size.height / waterMark.size.width)
  309. */
  310. - (void) setWaterMark:(UIImage *)waterMark normalizationFrame:(CGRect)normalizationFrame;
  311. /**
  312. * 设置片尾水印 [精简版不支持]
  313. * @param tailWaterMark 片尾水印图片
  314. * @param normalizationFrame 水印相对于视频图像的归一化frame,x,y,width,height 取值范围 0~1;
  315. * height不用设置,sdk内部会根据水印宽高比自动计算height;
  316. * 比如视频图像大小为(540,960) frame设置为(0.1,0.1,0.1,0),
  317. * 水印的实际像素坐标为(540 * 0.1,960 * 0.1,540 * 0.1 ,540 * 0.1 * waterMark.size.height / waterMark.size.width)
  318. * @param duration 水印的持续时长
  319. */
  320. - (void) setTailWaterMark:(UIImage *)tailWaterMark normalizationFrame:(CGRect)normalizationFrame duration:(CGFloat)duration;
  321. #pragma mark 视频生成相关
  322. /// @name 视频生成相关方法
  323. /**
  324. * 设置视频剪裁
  325. * @param startTime 视频起始时间
  326. * @param endTime 视频结束时间
  327. */
  328. - (void) setCutFromTime:(float)startTime toTime:(float)endTime;
  329. /**
  330. * 设置视频码率
  331. * @param bitrate 视频码率 单位:kbps
  332. * 如果设置了码率,SDK生成视频会优先使用这个码率,注意码率不要太大或则太小,码率太小视频会模糊不清,码率太大,生成视频体积会很大
  333. * 这里建议设置范围为:600~12000,如果没有调用这个接口,SDK内部会根据压缩质量自动计算码率
  334. */
  335. - (void) setVideoBitrate:(int)bitrate;
  336. /**
  337. * 生成视频
  338. * 优点:兼容性好,支持各种操作类型的视频生成,生成的视频文件在各个平台播放的兼容性好
  339. * 缺点:生成视频速度稍慢
  340. * 调用之后在TXVideoGenerateListener里面监听结果回调
  341. * @param videoCompressed 视频压缩质量
  342. * @param videoOutputPath 视频操作之后存储路径
  343. *
  344. */
  345. - (void) generateVideo:(TXVideoCompressed)videoCompressed videoOutputPath:(NSString *)videoOutputPath;
  346. /**
  347. * 使用系统函数快速生成视频
  348. * 优点:生成视频速度快
  349. * 缺点:1,剪切出来的视频在各个平台播放的兼容性稍差
  350. * 2,只有剪切和压缩操作才会使用系统函数,其他情况系统不支持,SDK内部会自动走正常视频生成的逻辑
  351. * 调用之后在 TXVideoGenerateListener 里面监听结果回调
  352. * @param videoCompressed 视频压缩质量
  353. * @param videoOutputPath 视频操作之后存储路径
  354. */
  355. - (void) quickGenerateVideo:(TXVideoCompressed)videoCompressed videoOutputPath:(NSString *)videoOutputPath;
  356. /**
  357. * 两次扫描生成视频(Two-Pass Encoding) [精简版不支持]
  358. * 优点:兼容性好,在同等码率下视频更加清晰,可以在较低码率下保持视频质量,支持各种操作类型的视频生成,生成的视频文件在各个平台播放的兼容性好
  359. * 缺点:生成视频慢
  360. * 调用之后在TXVideoGenerateListener里面监听结果回调
  361. * @param videoCompressed 视频压缩质量
  362. * @param videoOutputPath 视频操作之后存储路径
  363. */
  364. - (void) generateVideoWithTwoPass:(TXVideoCompressed)videoCompressed videoOutputPath:(NSString *)videoOutputPath;
  365. /**
  366. 暂停视频生成,仅适用于generateVideo,quickGenerateVideo调用无效
  367. @discussion
  368. SDK生成视频默认采用的是硬编码(编码效率高,编码出来的图像效果好),硬编码器在程序进后台后会停止工作,从而导致视频生成失败,
  369. 这里新增了两个接口pauseGenerate,resumeGenerate,程序进后台后您可以调用pauseGenerate暂停视频生成,程序重新进前台后,
  370. 您可以调用resumeGenerate 继续视频生成,这里需要注意的是,调用resumeGenerate,sdk会重启硬编码器,会有一定的概率重启失败,
  371. 或则重启后前几帧数据编码失败,这个时候SDK内部会在 TXVideoGenerateListener 抛出编码错误事件,收到错误事件后您需要重新生成视频。
  372. @see resumeGenerate
  373. */
  374. - (void) pauseGenerate;
  375. /**
  376. * 继续视频生成,仅适用于generateVideo,quickGenerateVideo调用无效
  377. * @see pauseGenerate
  378. */
  379. - (void) resumeGenerate;
  380. /**
  381. * 停止视频文件生成
  382. */
  383. - (void) cancelGenerate;
  384. @end
  385. #pragma mark - 视频合成、拼接
  386. /// 视频合成与拼接, 可以进行画中画合成或者前后拼接 [精简版不支持]
  387. @interface TXVideoJoiner : NSObject
  388. /// 合成的回调委托对象
  389. /// @see TXVideoJoinerListener
  390. @property (nonatomic ,weak) id<TXVideoJoinerListener> joinerDelegate;
  391. /// 预览的回调委托对象
  392. /// @see TXVideoPreviewListener
  393. @property (nonatomic ,weak) id<TXVideoPreviewListener> previewDelegate;
  394. /** 初始化 TXVideoJoiner ,如果您不需要预览,param 可以设置为nil
  395. * @param param 参考 TXPreviewParam
  396. */
  397. - (instancetype)initWithPreview:(TXPreviewParam *)param;
  398. /** 设置视频文件列表 app本地的视频文件建议使用这个接口
  399. * @param videoPathList 视频路径列表
  400. * @return 0 成功;
  401. * -1 视频列表文件不存在
  402. * -2 视频列表里面有一个或则几个视频不存在
  403. * -3 视频列表里面有不支持合成的视频 (声道数>2暂不支持合成)
  404. */
  405. - (int)setVideoPathList:(NSArray *)videoPathList;
  406. /** 设置视频文件列表 相册的视频文件建议使用这个接口
  407. * @param videoAssetList 视频AVAsset对象列表,从本地相册loading出视频列表后,可以直接传入对应的视频属性列表,会极大的降低视频从相册loading的时间,具体请参考demo用法
  408. * @return 0 成功;
  409. * -1 视频属性asset列表不存在
  410. * -2 视频列表里面有一个或则几个视频不存在
  411. * -3 视频列表里面有不支持合成的视频 (声道数>2暂不支持合成)
  412. */
  413. - (int)setVideoAssetList:(NSArray<AVAsset *> *)videoAssetList;
  414. /**
  415. * 设置视频文件列表中每个视频的声音大小(只针对分屏合成有效果)
  416. * @param volumes 视频音量值列表, 每一个音量值的取值范围 0.0 ~ 1.0
  417. */
  418. - (void)setVideoVolumes:(NSArray<NSNumber *> *)volumes;
  419. /// 开启视频播放,会从视频的起始位置开始播放 (需要在setVideoPathList之后调用)
  420. - (void)startPlay;
  421. /// 暂停播放
  422. - (void)pausePlay;
  423. /// 继续播放
  424. - (void)resumePlay;
  425. /// 停止播放
  426. - (void)stopPlay;
  427. /** 合成视频
  428. * SDK内部会自动判断视频是否可以快速合成,如果可以,会优先走快速合成逻辑
  429. * 调用后在TXVideoComposeListener里面监听结果回调
  430. * @param videoCompressed 视频压缩质量
  431. * @param videoOutputPath 生成新的视频存储路径
  432. */
  433. - (void)joinVideo:(TXVideoCompressed)videoCompressed videoOutputPath:(NSString *)videoOutputPath;
  434. /*
  435. *注意:当前接口已经被废弃,请使用 joinVideo 接口,SDK内部会自动判断视频是否具有快速合成的条件
  436. */
  437. //- (void)quickJoinVideo:(TXVideoCompressed)videoCompressed videoOutputPath:(NSString *)videoOutputPath;
  438. /** 设置分屏合成坐标
  439. * 使用方法详见demo示例
  440. * @param rects 需要合成视频的坐标
  441. * @param canvasWidth 画布宽度,也是分屏合成之后视频的宽度
  442. * @param canvasHeight 画布高度,也是分屏合成之后视频的高度
  443. */
  444. - (void)setSplitScreenList:(NSArray <NSValue *> *)rects canvasWidth:(int)canvasWidth canvasHeight:(int)canvasHeight;
  445. /** 分屏合成
  446. * @param videoCompressed 视频压缩质量
  447. * @param videoOutputPath 生成新的视频存储路径
  448. */
  449. - (void)splitJoinVideo:(TXVideoCompressed)videoCompressed videoOutputPath:(NSString *)videoOutputPath;
  450. /// 停止视频文件合成
  451. - (void)cancelJoin;
  452. @end
  453. /// @}