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.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 API 통합

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 바인딩 시 콘솔에서 생성되는 정보입니다. 2.5.1 이전의 SDK 버전에서 TELicenseCheck.hXMagic.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: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(), ^{
//뷰티 필터 옵션 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;
});