iOS
統合の準備
1. Demoパッケージをダウンロードして解凍し、Demoプロジェクトの
demo/XiaoShiPin/
ディレクトリ下のxmagickitフォルダをご自身のプロジェクトのpodfileファイルと同じレベルのディレクトリ下にコピーします。2. Podfileファイル内に以下の依存関係を追加します。その後、
pod install
コマンドを実行すると、インポートが完了します。pod 'xmagickit', :path => 'xmagickit/xmagickit.podspec'
3. Bundle IDを、テスト用に申請した権限と同じものに変更します。
開発者環境要件
開発ツール XCode 11およびそれを超える必要があります。App Storeまたはダウンロードアドレスをクリックします。
推奨実行環境:
デバイス要件:iPhone 5およびそれ以上である必要があります。iPhone 6およびそれ未満の場合は、フロントカメラのサポートを最大720pとし、1080pはサポートしていません。
システム要件:iOS 12.0およびそれ以降のバージョン。
SDKインターフェースの統合
ステップ1:権限の初期化
プロジェクト
AppDelegate
のdidFinishLaunchingWithOptions
に次のコードを追加します。LicenseURL
、LicenseKey
はTencent Cloud公式サイトに権限承認を申請した際の情報とします(XMagic SDKのバージョンが2.5.1より古い場合、TELicenseCheck.h
は、XMagic.framework
にあります。XMagicSDK のバージョンが2.5.1およびそれ以降の場合、TELicenseCheck.h
は、YTCommonXMagic.framework
にあります)。[TXUGCBase setLicenceURL:LicenseURL key:LicenseKey];[TELicenseCheck setTELicense:LicenseURLkey: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:objectDataoptions:NSJSONReadingMutableContainerserror:&jsonError];}NSDictionary *assetsDict = @{@"core_name":@"LightCore.bundle",@"root_path":[[NSBundle mainBundle] bundlePath],@"tnn_"@"beauty_config":beautyConfigJson};// Init beauty kitself.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:レンダリング処理の実施
UGSVの前処理フレームコールバックインターフェースで、YTProcessInputを作成してtextureIdをSDKに渡し、レンダリング処理を行います。
[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_0if(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;});