步骤1:美颜资源下载与集成
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="false" />
//true 表示libOpenCL是当前app必需的。如果没有此库,系统将不允许app安装
//false 表示libOpenCL不是当前app必需的。无论有没有此库,都可以正常安装app。如果设备有此库,腾讯特效SDK里的GAN类型特效能正常生效(例如童话脸、国漫脸)。如果设备没有此库,GAN类型不会生效,但也不影响SDK内其他功能的使用。
//关于uses-native-library的说明,请参考Android 官网介绍:https://developer.android.com/guide/topics/manifest/uses-native-library-element
添加后如下图:
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/Tencent-RTC/TencentEffect_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 升级:
在工程目录下执行命令:flutter pub upgrade 或者在 subspec.yaml 页面的右上角单击 Pub upgrade。
在工程目录下执行命令:flutter pub upgrade,然后在 ios 目录下执行命令:pod update。
步骤3:与直播关联
在应用的 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();
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!);
步骤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:添加和删除美颜面板上的美颜数据
在 BeautyDataManager、BeautyPropertyProducer、BeautyPropertyProducerAndroid 和 BeautyPropertyProducerIOS 这4个类中,您可以自主操作美颜面板数据的配置。
添加美颜资源
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
方法中删除以下代码:
本页内容是否解决了您的问题?