步骤一:解压 Demo 工程
- 下载集成了腾讯特效 TE 的 UGSV Demo 工程。本 Demo 基于腾讯特效 SDK S1-04 套餐构建。
- 替换资源。由于本 Demo 工程使用的 SDK 套餐未必与您实际的套餐一致,因此要将本 Demo 中的相关 SDK 文件替换为您实际使用的套餐的 SDK 文件。具体操作如下:
- 删除 xmagic 模块中 libs 目录下的
.aar
文件,将 SDK 中 libs 目录下的.aar
文件拷贝进 xmagic 模块中 libs 目录下。 - 删除 xmagic 模块中 assets 目录下的所有文件,将 SDK 中的
assets/
目录下的全部资源拷贝到 xmagic 模块../src/main/assets
目录下,如果SDK 包中的 MotionRes 文件夹内有资源,将此文件夹也拷贝到../src/main/assets
目录下 。 - 删除 xmagic 模块中jniLibs目录下的所有 .so 文件,在 SDK 包内的 jniLibs 中找到对应的 .so 文件(由于 SDK 中 jinLibs 文件夹下的 arm64-v8a 和 armeabi-v7a 的 .so 文件在压缩包中,所以需要先解压),拷贝到 xmagic 模块中的
../src/main/jniLibs
目录下。
- 删除 xmagic 模块中 libs 目录下的
- 将 Demo ⼯程中的 xmagic 模块引⼊到实际项⽬⼯程中。
步骤二:打开 app 模块的 build.gradle
- 将 applicationId 修改成与申请的测试授权⼀致的包名。
- 添加 gson 依赖设置。
configurations{ all*.exclude group:'com.google.code.gson' }
步骤三:SDK 接口集成
可参考 Demo ⼯程的 TCVideoRecoredActivity 类。
- 授权:
//鉴权注意事项及错误码详情,请参考 https://cloud.tencent.com/document/product/616/65891#.E6.AD.A5.E9.AA.A4.E4.B8.80.EF.BC.9A.E9.89.B4.E6.9D.83 XMagicImpl.checkAuth((errorCode, msg) -> { if (errorCode == TELicenseCheck.ERROR_OK) { showLoadResourceView(); } else { TXCLog.e(TAG, "鉴权失败,请检查鉴权url和key" + errorCode + " " + msg); } });
- 初始化素材:
private void showLoadResourceView() { if (XmagicLoadAssetsView.isCopyedRes) { XmagicResParser.parseRes(getApplicationContext()); initXMagic(); } else { XmagicLoadAssetsView loadAssetsView = new XmagicLoadAssetsView(this); loadAssetsView.setOnAssetsLoadFinishListener(() -> { XmagicResParser.parseRes(getApplicationContext()); initXMagic(); }); } }
- 开启推流设置:
TXUGCRecord instance = TXUGCRecord.getInstance(this); instance.setVideoProcessListener(new TXUGCRecord.VideoCustomProcessListener() { @Override public int onTextureCustomProcess(int textureId, int width, int height) { if (isPause == 0 && mXMagic !=null) { return mXMagic.process(textureId, width, height); } return 0; } @Override public void onDetectFacePoints(float[] floats) { } @Override public void onTextureDestroyed() { ... } });
- 将 textureId 传入到 SDK 内做渲染处理:
在 VideoCustomProcessListener 接口的onTextureCustomProcess(int textureId, int width, int height)
方法内添加如下代码。if (isPause == 0 && mXMagic !=null) { return mXMagic.process(textureId, width, height); } return 0;
- 暂停/销毁 SDK:
onPause() 用于暂停美颜效果,可以在 Activity/Fragment 生命周期方法中执行,onDestroy 方法需要在 GL 线程调用(可以在 onTextureDestroyed 方法中调用 XMagicImpl 对象的onDestroy()
) ,更多使用请参考 Demo。mXMagic.onPause(); //暂停,与Activity的onPause方法绑定 mXMagic.onDestroy(); //销毁,需要在GL线程中调用
- 布局中添加承载 SDK 美颜面板的布局:
<RelativeLayout android:id="@+id/panel_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:visibility="gone"/>
- 初始化面板
private void initXMagic() { if (mXMagic == null) { mXMagic = new XMagicImpl(this, mBeautyPanel); }else{ mXMagic.onResume(); } }
具体操作请参见 Demo ⼯程的 TCVideoRecordActivity.initXMagic();
⽅法。