ios
통합 준비
1. Demo 패키지를 다운로드하고 압축을 해제합니다.
2. Demo 프로젝트의 xmagic 모듈(bundle, XmagicIconRes, Xmagic 폴더)을 실제 항목의 프로젝트로 가져옵니다.
3. 사용하는 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
를 가져옵니다.4. framework 서명의 경우 General--> Masonry.framework 및 libpag.framework를 Embed & Sign으로 설정합니다. YTCommonXMagic.framework 버전 2.5.1 이전은 Do Not Embed를 선택하고, 버전 2.5.1 이후는 Embed & Sign을 선택합니다.
5. 발급된 라이선스와 일치하도록 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 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 API 통합
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 바인딩 시 콘솔에서 생성되는 정보입니다. 2.5.1 이전의 SDK 버전에서 TELicenseCheck.h
는 XMagic.framework
에 있고, 2.5.1 이상의 SDK 버전에서 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 SDK 인증 정보가 비어 있으며, 이는 I/O 실패로 인해 발생할 수 있습니다 |
-5 | 읽은 VCUBE TEMP License 파일의 내용이 비어 있으며 이는 I/O 실패로 인해 발생할 수 있습니다 |
-6 | v_cube.license 파일의 JSON 필드가 올바르지 않습니다. 도움이 필요한 경우 Tencent Cloud에 문의하십시오. |
-7 | 서명 확인에 실패했습니다. 도움이 필요한 경우 Tencent Cloud에 문의하십시오. |
-8 | 암호 해독에 실패했습니다. 도움이 필요한 경우 Tencent Cloud에 문의하십시오. |
-9 | TELicense 필드의 JSON 필드가 올바르지 않습니다. 도움이 필요한 경우 Tencent Cloud에 문의하십시오. |
-10 | 온라인으로 파싱된 TE SDK 인증 정보가 비어 있습니다. 도움이 필요한 경우 Tencent Cloud에 문의하십시오. |
-11 | TE SDK 인증 정보를 로컬 파일에 쓰지 못했습니다. I/O 실패로 인해 발생할 수 있습니다. |
-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(), ^{//뷰티 필터 옵션 UI_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;});