ファイルタイプ | 説明 |
---|---|
xmagic-xxx.aar | SDK。入力必須 |
../assets/ | アルゴリズムモデル、素材リソースパック。入力必須 |
../jniLibs | soライブラリ。入力必須 |
.aar
ファイルをappプロジェクトのlibs
ディレクトリ下に追加します。../src/main/assets
ディレクトリにコピーします。SDKパッケージのMotionResフォルダにリソースがある場合は、このフォルダを../src/main/assets
ディレクトリにコピーします。../src/main/jniLibs
ディレクトリ下にコピーします。appモジュールのbuild.gradle
を開き、依存参照を追加します。
android{
...
defaultConfig {
applicationIdを「権限承認licにバインドしたパッケージ名に変更」します
....
}
packagingOptions {
pickFirst '**/libc++_shared.so'
}
}
dependencies{
...
compile fileTree(dir: 'libs', include: ['*.jar','*.aar'])//追加*.aar
}
注意プロジェクトにGoogleのGsonライブラリを統合していない場合は、次の依存も追加する必要があります。
dependencies{ implementation 'com.google.code.gson:gson:2.8.2' }
権限の承認を申請し、License URLとLicense KEYを取得します。
注意:正常な状況では、Appのネットワーク接続が一度成功すれば認証フローは完了するため、Licenseファイルをプロジェクトのassetsディレクトリに保存する必要はありません。ただし、Appがネットワークに未接続の状態でSDKの関連機能を使用する必要がある場合は、Licenseファイルをダウンロードしてassetsディレクトリに保存し、最低保証プランとすることができます。この場合、Licenseファイル名は必ず
v_cube.license
としなければなりません。
関連業務モジュールの初期化コードの中でURLとKEYを設定し、licenseのダウンロードをトリガーします。使用する直前になってダウンロードすることは避けてください。ApplicationのonCreateメソッドでダウンロードをトリガーすることもできますが、この時点でネットワークの権限がない可能性や、ネットワーク接続の失敗率が比較的高い可能性があるため、推奨しません。
//ダウンロードのトリガーまたはlicenseの更新のみが目的であり、認証結果には関心がない場合は、4つ目のパラメータにはnullを渡します。
TELicenseCheck.getInstance().setXMagicLicense(context, URL, KEY, null);
その後、実際に美顔機能を使用する前に(例えばDemoのLaunchActivity.java
など)認証を行います。
// soライブラリがネットワークからダウンロードしたものの場合は、TELicenseCheck.getInstance().setTELicenseを呼び出す前にsoのパスを設定しておかなければ、認証に失敗する場合があります。
// XmagicApi.setLibPathAndLoad(validLibsDirectory);
// soがapkパッケージ内にある場合は、上記のメソッドを呼び出す必要はありません。
TELicenseCheck.getInstance().setTELicense(context, URL, KEY, new TELicenseCheckListener() {
@Override
public void onLicenseCheckFinish(int errorCode, String msg) {
//注意:このコールバックは呼び出しスレッド内にあるとは限りません
if (errorCode == TELicenseCheck.ERROR_OK) {
//認証に成功しました
}else{
//認証に失敗しました
}
}
});
認証errorCodeの説明:
エラーコード | 説明 |
---|---|
0 | 成功です。Success |
-1 | 入力パラメータが無効です(例:URLまたはKEYが空など) |
-3 | ダウンロードの段階で失敗しました。ネットワークの設定を確認してください |
-4 | ローカルから読み取ったTE権限承認情報が空です。IOの失敗による可能性があります |
-5 | 読み取ったVCUBE TEMP Licenseファイルの内容が空です。IOの失敗による可能性があります |
-6 | v_cube.license ファイルのJSONフィールドが正しくありません。Tencent Cloudチームに連絡して処理を依頼してください |
-7 | 署名の検証に失敗しました。Tencent Cloudチームに連絡して処理を依頼してください |
-8 | 復号に失敗しました。Tencent Cloudチームに連絡して処理を依頼してください |
-9 | TELicenseフィールド内のJSONフィールドが正しくありません。Tencent Cloudチームに連絡して処理を依頼してください |
-10 | ネットワークから解析したTE権限承認情報が空です。Tencent Cloudチームに連絡して処理を依頼してください |
-11 | TE権限承認情報をローカルファイルに書き込む際に失敗しました。IOの失敗による可能性があります |
-12 | ダウンロードに失敗しました。ローカルassetの解析も失敗しました |
-13 | 認証に失敗しました。soがパッケージ内にあるか、またはsoパスが正しく設定されているかを確認してください |
3004/3005 | 権限承認が無効です。Tencent Cloudチームに連絡して処理を依頼してください |
3015 | Bundle Id / Package Name が一致しません。Appで使用しているBundle Id / Package Nameが申請時のものと同じか、正しい権限承認ファイルを使用しているかを確認してください |
3018 | 権限承認ファイルが期限切れです。Tencent Cloudに更新を申請する必要があります |
その他 | Tencent Cloudチームに連絡して処理を依頼してください |
リソースファイルがassetsディレクトリ内にある場合は、使用する前にappのプライベートディレクトリにコピーしておく必要があります。事前にコピーしておくか、または前の手順の認証成功のコールバックの中でコピー操作を行うこともできます。サンプルコードは、DemoのLaunchActivity.java
です。
XmagicResParser.setResPath(new File(getFilesDir(), "xmagic").getAbsolutePath());
//loading
//リソースファイルのプライベートディレクトリへのコピーは1回のみ行います
XmagicResParser.copyRes(getApplicationContext());
リソースファイルがネットワークから動的ダウンロードしたものの場合は、ダウンロード成功後にリソースファイルパスを設定する必要があります。サンプルコードは、DemoのLaunchActivity.java
です。
XmagicResParser.setResPath(ダウンロードしたリソースファイルのローカルパス);
Tencent Effect SDK使用のライフサイクルはおおむね次のとおりです。
美顔UIデータを作成します。Demoプロジェクトのものを参照できます。 XmagicResParser.java,XmagicUIProperty.java,XmagicPanelDataManager.java
コード。
プレビューレイアウトにGLSurfaceViewを追加します。
<android.opengl.GLSurfaceView
android:id="@+id/camera_gl_surface_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
(オプション)カメラをクイック実装します。
Demoプロジェクトのcom.tencent.demo.cameraディレクトリをプロジェクトにコピーします。PreviewMgr
クラスを利用してカメラ機能をクイック実装します。実装の詳細についてはDemoプロジェクトのMainActivity.java
をご参照ください。
//カメラ初期化
mPreviewMgr = new PreviewMgr();
//レイアウトしたGlSurfaceViewサンプルをカメラツールクラスに渡します
mPreviewMgr.onCreate(mGlSurfaceView,false);
//プレビューテクスチャデータのコールバック関数を登録します
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);
美顔SDKを初期化します。ActivityのonResume()
メソッドに保存することをお勧めします。
mXmagicApi = new XmagicApi(this, XmagicResParser.getResPath(),new XmagicApi.OnXmagicPropertyErrorListener());
パラメータ
パラメータ | 意味 |
---|---|
Context context | コンテキスト |
String resDir | リソースファイルディレクトリ。詳細については、手順2をご参照ください |
OnXmagicPropertyErrorListener errorListener | コールバック関数実装クラス |
戻り値
エラーコードの意味についてはAPIドキュメントをご参照ください。
素材プロンプトのコールバック関数を追加します(メソッドのコールバックはサブスレッドで実行される場合があります)。一部の素材はユーザーに、うなずく、手を伸ばす、指ハートなどを促します。このコールバックは類似のプロンプトの表示に用いられます。
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();
}
});
美顔SDKが各フレームのデータを処理し、対応する処理結果を返します。
int outTexture = mXmagicApi.process(textureId, textureWidth, textureHeight);
指定するタイプの美顔エフェクトの数値を更新します。
// 使用可能な入力パラメータのプロパティはXmagicResParser.parseRes()から取得できます
mXmagicApi.updateProperty(XmagicProperty<?> p);
美顔SDKをPauseします。ActivityのonPause()
ライフサイクルにバインドすることをお勧めします。
//ActivityがonPauseの場合に呼び出します。OpenGLスレッドで呼び出す必要があります
mXmagicApi.onPause();
美顔SDKをリリースします。ActivityのonDestroy()
ライフサイクルにバインドすることをお勧めします。
//このメソッドはGLスレッドで呼び出す必要があることにご注意ください
mXmagicApi.onDestroy()
この記事はお役に立ちましたか?