步骤1:美颜资源下载与集成
2. 添加文件到自己的工程中:
1. 在 app 模块下找到 build.gradle 文件,添加您对应套餐的 maven 引用地址,例如您选择的是S1-04套餐,则添加如下:
dependencies {
implementation 'com.tencent.mediacloud:TencentEffect_S1-04:latest.release'
}
2. 在 app 模块下找到 src/main/assets 文件夹,如果没有则创建,检查下载的 SDK 包中是否有 MotionRes 文件夹,如果有则将此文件夹拷贝到 ../src/main/assets
目录下。
3. 在 app 模块下找到 AndroidManifest.xml 文件,在 application 表填内添加如下标签:
<uses-native-library
android:name="libOpenCL.so"
android:required="true" />
//此处的true 表示如果没有此库,则应用将无法正常运行。系统不允许在没有此库的设备上安装应用。
//false表示应用可以使用此库(如果存在),但专门在没有此库的情况下运行(如果有必要)。系统允许安装应用,即使不存在此库也是如此。如果您使用 "false",则需要自行负责妥善处理库不存在的情况。
添加后如下图:
4. 混淆配置:
如果您在打 release 包时,启用了编译优化(把 minifyEnabled 设置为 true),会裁掉一些未在 java 层调用的代码,而这些代码有可能会被 native 层调用,从而引起 no xxx method
的异常。
如果您启用了这样的编译优化,那就要添加这些 keep 规则,防止 xmagic 的代码被裁掉:
-keep class com.tencent.xmagic.** { *;}
-keep class org.light.** { *;}
-keep class org.libpag.** { *;}
-keep class org.extra.** { *;}
-keep class com.gyailib.**{ *;}
-keep class com.tencent.cloud.iai.lib.** { *;}
-keep class com.tencent.beacon.** { *;}
-keep class com.tencent.qimei.** { *;}
-keep class androidx.exifinterface.** { *;}
1. 添加美颜资源到您的工程。添加后如下图(您的资源种类跟下图不完全一致):
2. 在 demo 中把 demo/lib/producer 里面的4个类:BeautyDataManager、BeautyPropertyProducer、BeautyPropertyProducerAndroid 和 BeautyPropertyProducerIOS 复制添加到自己的 Flutter 工程中,这4个类是用来配置美颜资源,把美颜类型展示在美颜面板中。
步骤2:引用 Flutter 版本 SDK
GitHub 引用:在工程的 pubspec.yaml 文件中添加如下引用:
tencent_effect_flutter:
git:
url: https:
本地引用:从tencent_effect_flutter下载最新版本的 tencent_effect_flutter,然后把文件夹 android
、ios
、lib
和文件pubspec.yaml
、tencent_effect_flutter.iml
添加到工程目录下,然后在工程的 pubspec.yaml 文件中添加如下引用:(可参考demo) tencent_effect_flutter:
path: ../
tencent_effect_flutter 只是提供一个桥接,里面依赖的 XMagic 默认是最新版的,真正实现美颜是 XMagic。
如果要使用最新版本的美颜 SDK,您可以通过以下步骤进行 SDK 升级:
在工程目录下执行命令:flutter pub upgrade
或者在 subspec.yaml
页面的右上角单击 Pub upgrade。
在工程目录下执行命令:flutter pub upgrade,然后在 iOS 目录下执行命令:pod update
。
步骤3:与 TRTC 关联
在应用的 application 类的 oncreate 方法(或 FlutterActivity 的 onCreate 方法)中添加如下代码:
TRTCCloudPlugin.register(new XmagicProcesserFactory());
在应用的 AppDelegate 类中的 didFinishLaunchingWithOptions 方法里面中添加如下代码:
XmagicProcesserFactory *instance = [[XmagicProcesserFactory alloc] init];
[TencentTRTCCloud registerWithCustomBeautyProcesserFactory:instance];
添加后如下图:
步骤4:调用资源初始化接口
V0.3.5.0版本:
void _initSettings(InitXmagicCallBack callBack) async {
_setResourcePath();
if (await isCopiedRes()) {
callBack.call(true);
return;
} else {
_copyRes(callBack);
}
}
void _setResourcePath() async {
String resourceDir = await ResPathManager.getResManager().getResPath();
TXLog.printlog(
'$TAG method is _initResource ,xmagic resource dir is $resourceDir');
TencentEffectApi.getApi()?.setResourcePath(resourceDir);
}
void _copyRes(InitXmagicCallBack callBack) {
_showDialog(context);
TencentEffectApi.getApi()?.initXmagic((result) {
if (result) {
saveResCopied();
}
_dismissDialog(context);
callBack.call(result);
if (!result) {
Fluttertoast.showToast(msg: "initialization failed");
}
});
}
V0.3.1.1版本及之前:
String dir = await BeautyDataManager.getInstance().getResDir();
TXLog.printlog('文件路径为:$dir');
TencentEffectApi.getApi()?.initXmagic(dir,(reslut) {
_isInitResource = reslut;
callBack.call(reslut);
if (!reslut) {
Fluttertoast.showToast(msg: "初始化资源失败");
}
});
步骤5:进行美颜授权
TencentEffectApi.getApi()?.setLicense(licenseKey, licenseUrl,
(errorCode, msg) {
TXLog.printlog("打印鉴权结果 errorCode = $errorCode msg = $msg");
if (errorCode == 0) {
}
});
步骤6:开启美颜
var enableCustomVideo = await trtcCloud.enableCustomVideoProcess(open);
步骤7:设置美颜属性
V0.3.5.0版本:
TencentEffectApi.getApi()?.setEffect(sdkParam.effectName!,
sdkParam.effectValue, sdkParam.resourcePath, sdkParam.extraInfo)
V0.3.1.1版本及之前
TencentEffectApi.getApi()?.updateProperty(_xmagicProperty!);
步骤8:设置其他属性
暂停美颜音效
TencentEffectApi.getApi()?.onPause();
恢复美颜音效
TencentEffectApi.getApi()?.onResume();
监听美颜事件
TencentEffectApi.getApi()
?.setOnCreateXmagicApiErrorListener((errorMsg, code) {
TXLog.printlog("创建美颜对象出现错误 errorMsg = $errorMsg , code = $code");
});
设置人脸、手势、身体检测状态回调
TencentEffectApi.getApi()?.setAIDataListener(XmagicAIDataListenerImp());
设置动效提示语回调函数
TencentEffectApi.getApi()?.setTipsListener(XmagicTipsListenerImp());
设置人脸点位信息等数据回调(S1-05 和 S1-06 套餐才会有回调)
TencentEffectApi.getApi()?.setYTDataListener((data) {
TXLog.printlog("setYTDataListener $data");
});
移除所有回调。在页面销毁的时候需要移除掉所有的回调:
TencentEffectApi.getApi()?.setOnCreateXmagicApiErrorListener(null);
TencentEffectApi.getApi()?.setAIDataListener(null);
TencentEffectApi.getApi()?.setYTDataListener(null);
TencentEffectApi.getApi()?.setTipsListener(null);
说明:
接口详细可参考接口文档,其他可参考 Demo 工程。
步骤9:添加和删除美颜面板上的美颜数据
添加美颜资源
把您的资源文件按照步骤一中的方法添加到对应的资源文件夹里面。例如,您需要添加2D动效的资源:
1. 您应该把资源放在工程的 android/xmagic/src.mian/assets/MotionRes/2dMotionRes
目录下:
2. 并且把资源添加到工程的 ios/Runner/xmagic/2dMotionRes.bundle
目录下。
美颜面板配置:
V0.3.5.0
美颜面板上的属性通过 JSON 文件进行配置,JSON 文件位置如下图。
V0.3.1.1及之前
在 BeautyDataManager、BeautyPropertyProducer、BeautyPropertyProducerAndroid 和 BeautyPropertyProducerIOS 这4个类中,您可以自主操作美颜面板数据的配置。
删除美颜资源
对于某些 License 没有授权美颜和美体的部分功能,美颜面板上不需要展示这部分功能,需要在美颜面板数据的配置中删除这部分功能的配置。
例如,删除口红特效:分别在 BeautyPropertyProducerAndroid 类和 BeautyPropertyProducerIOS 类中的 getBeautyData 方法中删除以下代码。
本页内容是否解决了您的问题?