准备工作
1. 环境要求
flutter >= 3.3.0
2. 获取 SDK
3. 申请 License
集成 SDK
以下是集成 TAVMagicCutFlutter 的步骤,您也可以直接参照 example 工程中的代码。
1. 添加依赖
1. 将
TAVMagicCutFlutter 复制到项目根目录,也可以根据项目结构需要,复制到其他可访问到的目录。2. 在项目的
pubspec.yaml 中添加依赖,并指定 SDK 的目录,这里以根目录为例。tavmagic_cut_flutter:path: ./TAVMagicCutFlutter/Flutter
2. 将特效素材资源拷贝到工程
如果需要使用和 demo 一样的素材资源(贴纸、滤镜、特效、音乐、模板)可以从 example 中将素材资源包
Resource拷贝拖入到 app 项目工程中。Android
将
Resource/Android 下的 resource 目录,复制到自己 flutter 项目安卓主工程(一般为app)的src/main/assets下, 如果assets不存在,可手动创建。iOS
将
Resource/IOS 下的 Resource 目录,复制到自己 flutter 项目 iOS 的主工程根目录下,随后打开Xcode,打开您的 flutter ios 项目,在主工程文件夹上(一般为
Runner)点击右键,选择 Add Files to XXX,随后选择 Resource 文件夹,并点击 add。add 后会出现弹框,如果项目没有额外配置,这里一般
Action 选择为 Reference files in place,Groups 选择为 Create groups。3. 设置 License 鉴权
您可以根据自己的业务情况在相关业务模块的初始化代码中设置 URL 和 KEY,设置 License 后将立即触发 License 下载,如果在应用初始化时设置可以避免在实际使用中临时下载的影响。
FTAVMagicKitBase.instance.setLicense(TAV_MAGIC_LICENSE, TAV_MAGIC_KEY, listener: (errorCode, msg){if (errorCode == 0) {// success} else {// failed}});
使用 SDK
1. 相册选择
跳转选择编辑
_editProcessor = await tavMagicKit().openSelectEdit(selectOptions: FTAVKitSelectorOption());
仅相册选择
tavMagicKit().openMediaSelected((resultList) {// get media}, options: FTAVKitSelectorOption());
相册选择配置
FTAVKitSelectorOption()..displayColumnCount = 3 // display Column Count..mediaCategory = FTAVMediaCategory.ALL; // media category
2. 录屏编辑
跳转录屏并编辑:
_editProcessor = await tavMagicKit().openRecordEdit();
3. 草稿编辑
跳转草稿页面并编辑:
_editProcessor = await tavMagicKit().openDraftListForEdit();
4. 编辑
直接打开编辑
_editProcessor = await tavMagicKit().openEdit(editOption: FTAVKitEditOptions());
参数
editOption:编辑配置。
mediaResultList:选择的媒体文件,可以通过仅相册选择跳转来获取。
FTAVKitEditOptions
minEditDurationUs:最小编辑时间。
maxEditDurationUs:最大编辑时间。
主动退出编辑
_editProcessor?.exitEdit();
监听编辑
监听编辑,并在完成后调用生成视频:
_editProcessor?.setEditEventListener((code, params) async {if (code == FTAVEditResultEventCode.PUBLISH) {String? editorKey = params[FTAVEditResultParamKey.EDITOR_KEY]?.toString();if (null != editorKey) {curGerTaskId = await tavMagicKit().generateVideoByEditKey(editorKey, listener: FTAVGenerateListener(onGenerateStarted: () {if (_progressController != null) {_progressController!.close();_progressController = null;}_progressController = DemoProgressController();_progressController!.show(context: context, onCancel: () {tavMagicKit().cancelGenerateByTaskId(curGerTaskId!);_progressController?.close();});},onGenerateProgress: (progress) {_progressController?.updateProgress(progress);},onGenerateCompleted: (int code, String msg, String outputPath) {_progressController?.close();if (code == FTAVGenerateResultCode.GENERATE_RESULT_SUCCEED) {////// release editor///tavMagicKit().releaseEditorByEditKey(editorKey);// jump to video pageNavigator.of(context).push(MaterialPageRoute(builder : (context) => VideoPage(outputPath),));} else {ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('video generate error:$code, msg:$msg')));}}));}}});
释放编辑对象
tavMagicKit().releaseEditorByEditKey(editorKey);
5. 生成视频
生成视频
curGerTaskId = await tavMagicKit().generateVideoByEditKey(editorKey, listener: FTAVGenerateListener(onGenerateStarted: (){},onGenerateProgress: (progress){},onGenerateCompleted: (int code, String msg, String outputPath) {}));
取消生成
tavMagicKit().cancelGenerateByTaskId(curGerTaskId);