腾讯特效SDKAndroid_音视频解决方案_同尘科技
步骤一:解压 Demo 工程
1. 下载集成了腾讯特效 TE 的 MLVB Demo 工程。2. 将 Demo ⼯程中的 X – magic 模块引⼊到实际项⽬⼯程中。
步骤二:授权
注意部分代码与 Demo 工程中的代码有差异,请以本文档描述为准。1. 申请 LicenseURL 和 License KEY,请参见 License 指引。注意不需要把 License 文件下载下来放到本地工程里。2. 在 MLVBApplication 的 onCreate 方法中调用下面这个方法 ,触发 License 下载,避免在使用前才临时去下载。
import com.tencent.xmagic.license.LicenceCheck;LicenceCheck.getInstance().setXMagicLicense(context, URL, KEY);
3. 然后在真正要使用美颜功能时(例如 XMagicImpl.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刷新、执行下一步操作之类的事情 }}
说明如果鉴权失败,您可参考 查看鉴权结果及错误码说明 定位失败原因。
步骤三:打开 app 模块的 build.gradle
1. 将 applicationId 修改成与申请的测试授权⼀致的包名。2. 添加 gson 依赖设置。
configurations {all*.exclude group: 'com.google.code.gson'}
步骤四:SDK 接口集成
可参考 Demo ⼯程的 ThirdBeautyActivity 类。1. 授权:
XMagicImpl.initAuth(getApplicationContext());
2. 初始化素材:
XmagicLoadAssetsView loadAssetsView = new XmagicLoadAssetsView(this);loadAssetsView.setOnAssetsLoadFinishListener(new XmagicLoadAssetsView.OnAssetsLoadFinishListener() {@Overridepublic void onAssetsLoadFinish() {XmagicResParser.parseRes();XmagicUIState.initDatas(XmagicResParser.getProperties());initXMagic();}});
3. 启动推流设置:
String userId = String.valueOf(new Random().nextInt(10000));String pushUrl = AddressUtils.generatePushUrl(streamId, userId, 0);mLivePusher = new V2TXLivePusherImpl(this, V2TXLiveDef.V2TXLiveMode.TXLiveMode_RTC);mLivePusher.enableCustomVideoProcess(true, V2TXLivePixelFormatTexture2D, V2TXLiveBufferTypeTexture);mLivePusher.setObserver(new V2TXLivePusherObserver() { @Override public void onGLContextCreated() { }
@Override public int onProcessVideoFrame(V2TXLiveDef.V2TXLiveVideoFrame srcFrame, V2TXLiveDef.V2TXLiveVideoFrame dstFrame) { if (mXMagic != null) { dstFrame.texture.textureId = mXMagic.process(srcFrame.texture.textureId, srcFrame.width, srcFrame.height); } return srcFrame.texture.textureId; }
@Override public void onGLContextDestroyed() { if (mXMagic != null) { mXMagic.onDestroy(); } }});mLivePusher.setRenderView(mPushRenderView);mLivePusher.startCamera(true);int ret = mLivePusher.startPush(pushUrl);mLivePusher.startMicrophone();
4. 将 textureId 传入到 SDK 内做渲染处理:
在 V2TXLivePusherObserver 接口的 onProcessVideoFrame(V2TXLiveDef.V2TXLiveVideoFrame srcFrame, V2TXLiveDef.V2TXLiveVideoFrame dstFrame)
方法中添加如下代码。
if (mXMagic != null) { dstFrame.texture.textureId = mXMagic.process(srcFrame.texture.textureId, srcFrame.width,srcFrame.height);}return srcFrame.texture.textureId;
5. 暂停/销毁 SDK:注意当调用 onPause 方法后,需要调用 onDestroy 方法销毁,如果需要再次使用,则需要重新创建 mXMagic 对象。
mXMagic.onPause(); //暂停,与Activity的onPause方法绑定mXMagic.onDestroy(); //销毁,与Activity的onDestroy方法绑定
6. 布局中添加 SDK 美颜面板:
7. 初始化面板与美颜设置回调接口:
具体操作请参见 Demo⼯程的 ThirdBeautyActivity.initXMagic();
⽅法。
对音视频的解决方案有疑惑?想了解解决方案收费? 联系解决方案专家
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心,购买腾讯云享受折上折,更有现金返利:同意关联,立享优惠
阿里云解决方案也看看?: 点击对比阿里云的解决方案
暂无评论,你要说点什么吗?