ios
統合の準備
1. Demoパッケージをダウンロードして解凍し、Demoプロジェクトのxmagicモジュール(bundle、XmagicIconRes、Xmagicフォルダ)を実際のプロジェクトにインポートします。
2. 使用しているXMagic SDKのバージョンが2.5.0より古い場合は、SDKディレクトリ内の
libpag.framework
、Masonry.framework
、XMagic.framework
、YTCommonXMagic.framework
をインポートします。使用しているXMagic SDKのバージョンが2.5.1およびそれ以降の場合は、SDKディレクトリ内のlibpag.framework
、Masonry.framework
、XMagic.framework
、YTCommonXMagic.framework
、Audio2Exp.framework
、TEFFmpeg.framework
をインポートします。3. frameworkの署名は、General--> Masonry.frameworkとlibpag.frameworkはEmbed & 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
クラスのviewDidLoad
、buildBeautySDK
メソッドを参照できます。AppDelegate
クラスのapplication
メソッドはXmagic認証を実行します。ステップ1:権限の初期化
1. 初めにプロジェクトの
AppDelegate
のdidFinishLaunchingWithOptions
に次の認証コードを追加します。このうちLicenseURL
とLicenseKey
はTencent Cloud公式サイトに権限承認を申請した際の情報とします。[TXLiveBase setLicenceURL:LicenseURL key:LicenseKey];
2. Xmagicの認証:関連業務モジュールの初期化コードの中でURLとKEYを設定し、licenseのダウンロードをトリガーします。使用する直前になってダウンロードすることは避けてください。あるいは
AppDelegate
のdidFinishLaunchingWithOptions
メソッドでダウンロードをトリガーすることもできます。このうち、LicenseURL
とLicenseKey
はコンソールでLicenseをバインドした際に生成された権限承認情報です。SDKのバージョンが2.5.1より古い場合、TELicenseCheck.h
はXMagic.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: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:レンダリング処理の実施
ビデオフレームコールバックインターフェースで、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_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;});