有奖捉虫:行业应用 & 管理与支持文档专题 HOT

步骤1:美颜资源下载与集成

根据您购买的套餐 下载 SDK,添加文件到自己的工程中:
Android
iOS
1. 在 app 模块下找到 build.gradle 文件,添加您对应套餐的 maven 引用地址。例如您选择的是S1-04套餐,则添加如下:
dependencies {
implementation 'com.tencent.mediacloud:TencentEffect_S1-04:latest.release'
}
各套餐对应的 maven 地址,请参见 文档
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

在工程的 pubspec.yaml 文件中添加如下引用:
tencent_effect_flutter:
git:
url: https://github.com/TencentCloud/tencenteffect-sdk-flutter
本地引用:从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升级:
Android
iOS
在工程目录下执行命令:flutter pub upgrade或者在subspec.yaml页面的右上角点击Pub upgrade
在工程目录下执行命令:flutter pub upgrade,然后在ios目录下执行命令:pod update

步骤3:与直播关联

Android
iOS
在应用的 application 类的 oncreate 方法(或 FlutterActivity 的 onCreate 方法)中添加如下代码:
TXLivePluginManager.register(new XmagicProcesserFactory());
在应用的 AppDelegate 类中的 didFinishLaunchingWithOptions 方法里面中添加如下代码:
XmagicProcesserFactory *instance = [[XmagicProcesserFactory alloc] init];
[TXLivePluginManager registerWithCustomBeautyProcesserFactory:instance];
添加后如下图:



步骤4:调用资源初始化接口

V0.3.5.0版本:

void _initSettings(InitXmagicCallBack callBack) async { _setResourcePath(); /// 复制资源只需要复制一次,在当前版本中如果成功复制了一次,以后就不需要再复制资源。 /// Copying the resource only needs to be done once. Once it has been successfully copied in the current version, there is no need to copy it again in future versions. 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 _livePusher?.enableCustomVideoProcess(true);

步骤7:设置美颜属性

V0.3.5.0版本:

TencentEffectApi.getApi()?.setEffect(sdkParam.effectName!, sdkParam.effectValue, sdkParam.resourcePath, sdkParam.extraInfo)

V0.3.1.1版本及之前

TencentEffectApi.getApi()?.updateProperty(_xmagicProperty!);
///_xmagicProperty 可通过 BeautyDataManager.getInstance().getAllPannelData();获取所有的属性,需要使用美颜属性的时候可通过updateProperty方法设置属性。

步骤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:添加和删除美颜面板上的美颜数据

添加美颜资源

1. 把您的资源文件按照步骤一中的方法添加到对应的资源文件夹里面。例如:需要添加2D动效的资源,您应该把资源放在工程的 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 方法中删除以下代码: