腾讯特效SDKAndroid_音视频解决方案_同尘科技
集成准备
文件准备:
文件类型 | 说明 |
xmagic-xxx.aar | SDK,必选 |
../assets/ | 算法模型、素材资源包,必选 |
../jniLibs | so 库,必选 |
导入资源
资源
添加上述文件准备的全部 .aar
文件到 app 工程 libs
目录下。将 SDK 包内的 assets/ 目录下的全部资源拷贝到 ../src/main/assets
目录下。将 jniLibs 文件夹拷贝到工程的 ../src/main/jniLibs
目录下。
导入方法
打开 app 模块的 build.gradle
添加依赖引用:
android{ ... defaultConfig { applicationId "修改成与授权lic绑定的appID" .... } packagingOptions { pickFirst '**/libc++_shared.so' }}
dependencies{ ... compile fileTree(dir: 'libs', include: ['*.jar','*.aar'])//添加 *.aar}
包体大小瘦身:动态下载 assets、so、动效资源指引
为了减少包大小,您可以将 SDK 所需的 assets 资源、so 库、以及动效资源 MotionRes(部分基础版 SDK 无动效资源)改为联网下载。在下载成功后,将上述文件的路径设置给 SDK。我们建议您复用 Demo 的下载逻辑,当然,也可以使用您已有的下载服务。动态下载的详细指引,请参见 SDK 包体瘦身(Android)。
整体流程
步骤一:鉴权
注意部分代码与 Demo 工程中的代码有差异,请以本文档描述为准。1. 申请授权,得到 License URL 和 License KEY,请参见 License 指引。注意不需要把 License 文件下载下来放到本地工程里。2. 在 Application 的 onCreate 或相关业务模块的初始化代码中设置 URL 和 KEY,触发 license 下载,避免在使用前才临时去下载。
LicenceCheck.getInstance().setXMagicLicense(context, URL, KEY);
3. 然后在真正要使用美颜功能时 ( 例如 Demo 的 LaunchActivity.java ),再去做鉴权:
private void auth() { LicenceCheck.getInstance().setListener(new LicenceCheck.LicenceCheckListener() { @Override public void onLicenceLoaded(int result, String reason) { //在2.4.0版本,如果无需下载,或者下载失败,不会回调这个方法。(后续版本会补齐) //如果有下载,且下载成功,会回调。result为LicenceCheck.ERROR_OK表示下载下来的license文件是有效的 if (result == LicenceCheck.ERROR_OK) { checkAuth(context); } } }); //再次触发下载(因为有可能之前在onCreate那里触发下载没有成功) LicenceCheck.getInstance().setXMagicLicense(context,URL,KEY);
checkAuth(context);}
private boolean authorized = false;private synchronized void checkAuth(Context context) { Log.d(TAG, "checkAuth: authorized=" + authorized); if (authorized) { return; } LicenceCheck mLicenceCheck = LicenceCheck.getInstance(); String licenseInfo = mLicenceCheck.getBase64Licence(); if (TextUtils.isEmpty(licenseInfo)) { licenseInfo = mLicenceCheck.getLicensePathBase64(); } if (TextUtils.isEmpty(licenseInfo)) { Log.d(TAG, "licenseInfo is empty"); authorized = false; } else { Auth.AuthResult result = Auth.authByBase64(context, licenseInfo, "");
String msg = Json.toJsonStr(result); Log.d(TAG, "isSucceed=" + result.isSucceed); Log.d(TAG, "msg=" + msg); authorized = result.isSucceed; }
if (authorized) { //TODO 鉴权成功,在这里通知UI刷新、执行下一步操作之类的事情 }}
说明如果鉴权失败,您可参考 查看鉴权结果及错误码说明 定位失败原因。
步骤二:加载腾讯特效 SDK xmagic-xxx.aar
使用腾讯特效 SDK 生命周期大致如下:1. 构造美颜 UI 数据,可参考 Demo 工程的 XmagicResParser.java,XmagicPropertyData.java,XmagicUIState.java
代码。2. 预览布局中添加 GLSurfaceView。
3. (可选)快速实现相机。
将 Demo 工程中的 com.tencent.demo.camera 目录拷贝到工程中。利用 PreviewMgr
类快速实现相机功能。详细实现可参考 Demo 工程的 MainActivity.java
。
//初始化相机mPreviewMgr = new PreviewMgr();//将布局的GlSurfaceView示例传入相机工具类mPreviewMgr.onCreate(mGlSurfaceView);//注册预览纹理数据回调函数mPreviewMgr.setCustomTextureProcessor((textureId, textureWidth, textureHeight) -> { if (mXmagicApi == null) { return textureId; } //调用美颜sdk进行渲染 int outTexture = mXmagicApi.process(textureId, textureWidth, textureHeight); return outTexture;});
//在Activity中的onResume方法中启动相机mPreviewMgr.onResume(this, 1280, 720);
4. 初始化美颜 SDK,建议放在 Activity 的 onResume()
方法中。
mXmagicApi = new XmagicApi(this, XmagicResParser.getResPath(), new XmagicApi.OnXmagicPropertyErrorListener());
参数
参数 | 含义 |
Context context | 上下文 |
String resDir | 资源文件目录,V1版本固定写法 |
OnXmagicPropertyErrorListener errorListener | 回调函数实现类 |
返回
错误码含义对照表:
错误码 | 含义 |
-1 | 未知错误 |
-100 | 3D 引擎资源初始化失败 |
-200 | 不支持 GAN 素材 |
-300 | 设备不支持此素材组件 |
-400 | 模板 JSON 内容为空 |
-500 | SDK版本过低 |
-600 | 不支持分割 |
-700 | 不支持 OpenGL |
-800 | 不支持脚本 |
5000 | 分割背景图片分辨率超过2160*3840 |
5001 | 分割背景图片所需内存不足 |
5002 | 分割背景视频解析失败 |
5003 | 分割背景视频超过200秒 |
5004 | 分割背景视频格式不支持 |
5. 美颜 SDK 处理每帧数据并返回相应处理结果。
int outTexture = mXmagicApi.process(textureId, textureWidth, textureHeight);
6. 用于更新指定类型的美颜特效数值。
// 可用的入参属性可以从 XmagicResParser.parseRes() 获得mXmagicApi.updateProperty(XmagicProperty p);
7. 释放美颜 SDK,建议与 Activity 的 onPause()
生命周期绑定。
//在 Activity 的 onPause 时调用, 需要在 OpenGL 线程调用mXmagicApi.onPause();
8. 添加素材提示语回调函数(方法回调有可能运行在子线程)。
mXmagicApi.setTipsListener(new XmagicTipsListener() { final XmagicToast mToast = new XmagicToast(); @Override public void tipsNeedShow(String tips, String tipsIcon, int type, int duration) { mToast.show(MainActivity.this, tips, duration); }
@Override public void tipsNeedHide(String tips, String tipsIcon, int type) { mToast.dismiss(); }});
完成上述步骤后,用户即可根据自己的实际需求控制展示时机以及其他设备相关环境。
对音视频的解决方案有疑惑?想了解解决方案收费? 联系解决方案专家
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心,购买腾讯云享受折上折,更有现金返利:同意关联,立享优惠
阿里云解决方案也看看?: 点击对比阿里云的解决方案
暂无评论,你要说点什么吗?