ios

統合の準備

1. Demoパッケージをダウンロードして解凍し、Demoプロジェクトのxmagicモジュール(bundle、XmagicIconRes、Xmagicフォルダ)を実際のプロジェクトにインポートします。
2. 使用しているXMagic SDKのバージョンが2.5.0より古い場合は、SDKディレクトリ内の libpag.frameworkMasonry.frameworkXMagic.frameworkYTCommonXMagic.frameworkをインポートします。使用しているXMagic SDKのバージョンが2.5.1およびそれ以降の場合は、SDKディレクトリ内のlibpag.frameworkMasonry.frameworkXMagic.frameworkYTCommonXMagic.frameworkAudio2Exp.frameworkTEFFmpeg.frameworkをインポートします。
3. frameworkの署名は、General--> Masonry.frameworklibpag.frameworkEmbed & Signを選択します。YTCommonXMagic.framework は、バージョン2.5.1より古い場合はDo Not Embedを選択し、バージョン2.5.1およびそれ以降の場合はEmbed & Signを選択します。
4. Bundle IDを、テスト用に申請した権限と同じものに変更します。

開発者環境要件

開発ツールXCode 11およびそれ以上:App Storeまたはダウンロードアドレスをクリックします。
推奨実行環境:
デバイス要件:iPhone 5およびそれ以上である必要があります。iPhone 6およびそれ未満の場合は、フロントカメラのサポートを最大720pとし、1080pはサポートしていません。
システム要件:iOS 10.0およびそれ以降のバージョン。

C/C++レイヤー開発環境

XCodeはデフォルトではC++環境となります。
タイプ
依存ライブラリ
システム依存ライブラリ
Accelerate
AssetsLibrary
AVFoundation
CoreMedia
CoreFoundation
CoreML
Foundation
JavaScriptCore
libc++.tbd
libz.b
libresolv.tbd
libsqlite3.0.tbd
MetalPerformanceShaders
MetalKit
MobileCoreServices
OpneAL
OpneGLES
Security
ReplayKit
SystemConfiguration
UIKit
付属ライブラリ
YTCommon(認証静的ライブラリ)
XMagic(美顔静的ライブラリ)
libpag(ビデオデコード動的ライブラリ)
Masonry(ウィジェットレイアウトライブラリ)
TXLiteAVSDK_Professional
TXFFmpeg
TXSoundTouch
Audio2Exp(xmagic sdk versionは2.5.1およびそれ以降のバージョンのみ)
TEFFmpeg(xmagic sdk versionは2.5.1およびそれ以降のバージョンのみ)

SDKインターフェースの統合

ステップ1およびステップ2については、DemoプロジェクトのThirdBeautyViewControllerクラスのviewDidLoadbuildBeautySDKメソッドを参照できます。AppDelegateクラスのapplicationメソッドはXmagic認証を実行します。
ステップ4からステップ7までは、DemoプロジェクトのThirdBeautyViewControllerBeautyViewクラスの関連インスタンスコードを参照できます。

ステップ1:権限の初期化

1. 初めにプロジェクトのAppDelegatedidFinishLaunchingWithOptionsに次の認証コードを追加します。このうちLicenseURLLicenseKeyはTencent Cloud公式サイトに権限承認を申請した際の情報とします。
[TXLiveBase setLicenceURL:LicenseURL key:LicenseKey];
2. Xmagicの認証:関連業務モジュールの初期化コードの中でURLとKEYを設定し、licenseのダウンロードをトリガーします。使用する直前になってダウンロードすることは避けてください。あるいはAppDelegatedidFinishLaunchingWithOptionsメソッドでダウンロードをトリガーすることもできます。このうち、LicenseURLLicenseKeyはコンソールでLicenseをバインドした際に生成された権限承認情報です。SDKのバージョンが2.5.1より古い場合、TELicenseCheck.hXMagic.framework内にあります。SDKのバージョンが2.5.1およびそれ以降の場合、TELicenseCheck.h
YTCommonXMagic.framework内にあります。
[TELicenseCheck setTELicense:LicenseURL key:LicenseKey completion:^(NSInteger authresult, NSString * _Nonnull errorMsg) {
if (authresult == TELicenseCheckOk) {
NSLog(@"認証成功");
} else {
NSLog(@"認証失敗");
}
}];
認証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
認証に失敗しました
その他
Tencent Cloudチームに連絡して処理を依頼してください

ステップ2:SDK素材リソースパスの設定

CGSize previewSize = [self getPreviewSizeByResolution:self.currentPreviewResolution];
NSString *beautyConfigPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
beautyConfigPath = [beautyConfigPath stringByAppendingPathComponent:@"beauty_config.json"];
NSFileManager *localFileManager=[[NSFileManager alloc] init];
BOOL isDir = YES;
NSDictionary * beautyConfigJson = @{};
if ([localFileManager fileExistsAtPath:beautyConfigPath isDirectory:&isDir] && !isDir) {
NSString *beautyConfigJsonStr = [NSString stringWithContentsOfFile:beautyConfigPath encoding:NSUTF8StringEncoding error:nil];
NSError *jsonError;
NSData *objectData = [beautyConfigJsonStr dataUsingEncoding:NSUTF8StringEncoding];
beautyConfigJson = [NSJSONSerialization JSONObjectWithData:objectData
options:NSJSONReadingMutableContainers
error:&jsonError];
}
NSDictionary *assetsDict = @{@"core_name":@"LightCore.bundle",
@"root_path":[[NSBundle mainBundle] bundlePath],
@"tnn_"
@"beauty_config":beautyConfigJson
};
// Init beauty kit
self.beautyKit = [[XMagic alloc] initWithRenderSize:previewSize assetsDict:assetsDict];

ステップ3:ログおよびイベント監視の追加

// Register log
[self.beautyKit registerSDKEventListener:self];
[self.beautyKit registerLoggerListener:self withDefaultLevel:YT_SDK_ERROR_LEVEL];

ステップ4:美顔の各種効果の設定

- (int)configPropertyWithType:(NSString *_Nonnull)propertyType withName:(NSString *_Nonnull)propertyName withData:(NSString*_Nonnull)propertyValue withExtraInfo:(id _Nullable)extraInfo;

ステップ5:レンダリング処理の実施

ビデオフレームコールバックインターフェースで、YTProcessInputを作成してSDKに渡し、レンダリング処理を行います。DemoのThirdBeautyViewControllerを参照できます。
[self.xMagicKit process:inputCPU withOrigin:YtLightImageOriginTopLeft withOrientation:YtLightCameraRotation0]

ステップ6:SDKの一時停止/再開

[self.beautyKit onPause];
[self.beautyKit onResume];

ステップ7:レイアウトにSDK美顔パネルを追加

UIEdgeInsets gSafeInset;
#if __IPHONE_11_0 && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_11_0
if(gSafeInset.bottom > 0){
}
if (@available(iOS 11.0, *)) {
gSafeInset = [UIApplication sharedApplication].keyWindow.safeAreaInsets;
} else
#endif
{
gSafeInset = UIEdgeInsetsZero;
}

dispatch_async(dispatch_get_main_queue(), ^{
//美顔オプションインターフェース
_vBeauty = [[BeautyView alloc] init];
[self.view addSubview:_vBeauty];
[_vBeauty mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.mas_equalTo(self.view);
make.centerX.mas_equalTo(self.view);
make.height.mas_equalTo(254);
if(gSafeInset.bottom > 0.0){ // 全画面適用
make.bottom.mas_equalTo(self.view.mas_bottom).mas_offset(0);
} else {
make.bottom.mas_equalTo(self.view.mas_bottom).mas_offset(-10);
}
}];
_vBeauty.hidden = YES;
});