Android
手順1:Demoプロジェクトの解凍
- Tencent Effect TEを統合したUGSV Demoプロジェクトをダウンロードします。このDemoは、Tencent Effect SDK S1-04パッケージに基づいて作成されています。
- リソースの置き換え:このDemoプロジェクトで使用するSDKパッケージが実際のパッケージと一致するとは限らないため、このDemoの関連SDKファイルを実際に使用されるパッケージのSDKファイルに置き換える必要があります。具体的な操作は次のとおりです。
xmagickit module
のbuild.gradle
ファイルで下記を見つけます。api 'com.tencent.mediacloud:TencentEffect_S1-04:latest.release'
購入した依存パッケージに置き換えます。
- パッケージに動的エフェクトおよびフィルター機能が含まれる場合は、Tencent Effect SDKダウンロードページで対応するリソースをダウンロードし、動的エフェクトおよびフィルター素材を
xmagickit module
下の以下のディレクトリに配置する必要があります。- 動的エフェクト:
../assets/MotionRes
- フィルター:
../assets/lut
- 動的エフェクト:
- Demoプロジェクトのxmagickitモジュールを実際のプロジェクトにインポートします。
手順2:appモジュールのbuild.gradleを開く
applicationIdを、申請したテスト権限と同じパッケージ名に変更します。
手順3:SDKインターフェースの統合
DemoプロジェクトのUGCKitVideoRecordタイプを参照できます。
権限承認:
//認証の注意事項およびエラーコードの詳細については、https://intl.cloud.tencent.com/document/product/1143/45385#.E6.AD.A5.E9.AA.A4.E4.B8.80.EF.BC.9A.E9.89.B4.E6.9D.83をご参照ください XMagicImpl.checkAuth(new TELicenseCheck.TELicenseCheckListener() { @Override public void onLicenseCheckFinish(int errorCode, String msg) { if (errorCode == TELicenseCheck.ERROR_OK) { loadXmagicRes(); }else{ Log.e("TAG", "auth fail ,please check auth url and key" + errorCode + " " + msg); } } });
素材の初期化:
private void loadXmagicRes() { if (XMagicImpl.isLoadedRes) { XmagicResParser.parseRes(mActivity.getApplicationContext()); initXMagic(); return; } new Thread(new Runnable() { @Override public void run() { XmagicResParser.copyRes(mActivity.getApplicationContext()); XmagicResParser.parseRes(mActivity.getApplicationContext()); XMagicImpl.isLoadedRes = true; new Handler(Looper.getMainLooper()).post(new Runnable() { @Override public void run() { initXMagic(); } }); } }).start(); }
UGSVと美顔のバインド:
private void initBeauty() { TXUGCRecord instance = TXUGCRecord.getInstance(UGCKit.getAppContext()); instance.setVideoProcessListener(new TXUGCRecord.VideoCustomProcessListener() { @Override public int onTextureCustomProcess(int textureId, int width, int height) { if (xmagicState == XMagicImpl.XmagicState.STARTED && mXMagic != null) { return mXMagic.process(textureId, width, height); } return textureId; } @Override public void onDetectFacePoints(float[] floats) { } @Override public void onTextureDestroyed() { if (Looper.getMainLooper() != Looper.myLooper()) { //メインスレッドではない boolean stopped = xmagicState == XMagicImpl.XmagicState.STOPPED; if (stopped || xmagicState == XMagicImpl.XmagicState.DESTROYED) { if (mXMagic != null) { mXMagic.onDestroy(); } } if (xmagicState == XMagicImpl.XmagicState.DESTROYED) { TXUGCRecord.getInstance(UGCKit.getAppContext()).setVideoProcessListener(null); } } } }); }
SDKの一時停止/破棄:
onPause()
は美顔効果の一時停止に使用し、Activity/Fragmentライフサイクルメソッドにおいて実行できます。onDestroyメソッドはGLスレッドで呼び出す必要があります(onTextureDestroyedメソッドでXMagicImplオブジェクトのonDestroy()
を呼び出すことができます)。その他の使用については事例にあるonTextureDestroyedメソッドをご参照ください。@Override public void onTextureDestroyed() { if (Looper.getMainLooper() != Looper.myLooper()) { //メインスレッドではない boolean stopped = xmagicState == XMagicImpl.XmagicState.STOPPED; if (stopped || xmagicState == XMagicImpl.XmagicState.DESTROYED) { if (mXMagic != null) { mXMagic.onDestroy(); } } if (xmagicState == XMagicImpl.XmagicState.DESTROYED) { TXUGCRecord.getInstance(UGCKit.getAppContext()).setVideoProcessListener(null); } } }
レイアウトに美顔パネルをロードしたレイアウトを追加:
<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(mActivity, getBeautyPanel()); }else{ mXMagic.onResume(); } }
具体的な操作についてはDemoプロジェクトのUGCKitVideoRecordタイプをご参照ください。