开发者环境要求
开发工具 Xcode 11 以上
设备要求:iPhone 5 及以上;iPhone 6 及以下前置摄像头最多支持到 720p,不支持 1080p。
系统要求:iOS 12.2 及以上。
导入 SDK
您可以选择使用 CocoaPods 方案,或者先将 SDK 下载到本地,再将其手动导入到您当前的项目中。
1. 安装 CocoaPods
在终端窗口执行以下命令安装 CocoaPods ,如果您已经完成 CocoaPods 的安装,可以跳过该步。
sudo gem install cocoapods
2. 创建 Podfile 文件
在终端窗口中进入项目根目录,执行以下命令为项目创建 Podfile 文件。
pod init
3. 编辑 Podfile 文件
根据您的项目套餐选择合适的版本,编辑并保存 Podfile 文件。
#请根据您的套餐安装对应的库#例如:您的套餐是A1-00pod 'TencentEffect_A1-00', :podspec => 'https://mediacloud-76607.gzc.vod.tencent-cloud.com/TencentEffect/iOS/podspec/latest/TencentEffect_A1-00.podspec'#例如:您的套餐是S1-07pod 'TencentEffect_S1-07', :podspec => 'https://mediacloud-76607.gzc.vod.tencent-cloud.com/TencentEffect/iOS/podspec/latest/TencentEffect_S1-07.podspec'
4. 更新并安装 SDK
在终端窗口中输入如下命令以更新本地库文件,并安装 SDK。
pod install
5. 集成后配置
将 Bundle Identifier 修改成与申请的测试授权一致。
在 Info.plist 中添加相机权限说明(Privacy - Camera Usage Description)。
如果您的套餐包含动效和滤镜功能,仍需按下文“导入素材”章节下载并导入 motionRes 下的 bundle 素材。
从 4.2.0.21 版本开始,美颜特效 SDK 支持 Swift Package Manager(简称 SPM)集成。
1. 选择 Package 仓库
为了减小安装包体积,SDK 按套餐拆分为两个 SPM 仓库,请根据您购买的套餐选择:
套餐 | SPM 仓库地址 |
A1-00、A1-01、S1-00 | |
A1-02 ~ A1-06、S1-01 ~ S1-07、X1-01、X1-02、All |
2. 添加 Package
打开 Xcode 项目,选择 File > Add Package Dependencies...,在搜索框中粘贴上述对应仓库的 URL,等待加载完成后单击 Add Package。
3. 选择版本
在 Choose Package Options 中设置依赖规则(Dependency Rule),建议选择 Up to Next Major Version 自动获取最新兼容版本。
4. 选择套餐
在 Choose Package Products 中选择要集成的 Product 与目标 Target。每个套餐提供三个 Product 变体:
Product 后缀 | 含义 |
无后缀,(如 TencentEffect_S1-07) | 包含 SDK 二进制库与资源包(XMagicResources)。 |
_nobundle(如 TencentEffect_S1-07_nobundle) | 仅包含 SDK 二进制库,不含资源包。 |
_nolibpag(如 TencentEffect_S1-07_nolibpag) | 不含 libpag 库,含资源包。 |
5. 集成后配置
在 Build Settings 中的 Other Linker Flags 添加
-ObjC。将 Bundle Identifier 修改成与申请的测试授权一致。
在 Info.plist 中添加相机权限说明(Privacy - Camera Usage Description)。
如果您的套餐包含动效和滤镜功能,仍需按下文“导入素材”章节下载并导入 motionRes 下的 bundle 素材。
1. 集成 SDK
1.1 下载并解压 SDK 和美颜资源,frameworks 文件夹里面是 SDK、resources 文件夹里面是美颜的 bundle 资源。
1.2 打开您的 Xcode 工程项目,把 frameworks 文件夹里面的 framework 添加到实际工程中。
1.3 选择要运行的 target,选中 General 项,单击 Frameworks,Libraries,and Embedded Content 项展开,单击底下的“+”号图标去添加依赖库。
1.4 依次添加下载的
XMagic.framework、YTCommonXMagic.framework、libpag.framework、TECodec.framework 及其所需依赖库 MetalPerformanceShaders.framework、JavaScriptCore.framework、VideoToolbox.framework、libc++.tbd、libsqlite3.tbd。
2. 集成后配置
在 Build Settings 中的 Other Linker Flags 添加
-ObjC。将 Bundle Identifier 修改成与申请的测试授权一致。
在 Info.plist 中添加相机权限说明(Privacy - Camera Usage Description)。
如果您的套餐包含动效和滤镜功能,仍需按下文“导入素材”章节下载并导入 motionRes 下的 bundle 素材。
为了减少包大小,您可以将 SDK 所需的模型资源和动效资源 MotionRes(部分基础版 SDK 无动效资源)改为联网下载。在下载成功后,将上述文件的路径设置给 SDK。
导入素材
如果您的套餐包含动效和滤镜功能,那么需要在 SDK 下载页面 下载对应的套餐包,解压之后将 resources/motionRes 文件夹下的 bundle 按需导入主工程任意目录下。导入后如下图所示,其中 lut.bundle 是滤镜素材,其他的是动效素材。

注意:
配置权限
在 Info.plist 文件中添加相应权限的说明,否则程序在 iOS 10 系统上会出现崩溃。请在 Privacy - Camera Usage Description 中开启相机权限,允许 App 使用相机。
使用流程
步骤一:鉴权
1. 申请授权,得到 LicenseURL 和 LicenseKEY,请参见 License 指引。
2. 在相关业务模块的初始化代码中设置 URL 和 KEY,触发 License 下载,避免在使用前才临时去下载。也可以在 AppDelegate 的 didFinishLaunchingWithOptions 方法里触发下载。其中,LicenseURL 和 LicenseKey 是控制台绑定 License 时生成的授权信息。
SDK 版本在2.5.1以前,
TELicenseCheck.h 在 XMagic.framework 里面;SDK 版本在2.5.1及以后,TELicenseCheck.h 在 YTCommonXMagic.framework 里面,只有鉴权成功后才能使用 SDK。[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 字段不对。请联系腾讯云团队处理。 |
-7 | 签名校验失败。请联系腾讯云团队处理。 |
-8 | 解密失败。请联系腾讯云团队处理。 |
-9 | TELicense 字段里的 JSON 字段不对。请联系腾讯云团队处理。 |
-10 | 从网络解析的 TE 授权信息为空。请联系腾讯云团队处理。 |
-11 | 把 TE 授权信息写到本地文件时失败,可能是 IO 失败引起。 |
-12 | 下载失败,解析本地 asset 也失败。 |
-13 | 鉴权失败。 |
其他 | 请联系腾讯云团队处理。 |
步骤二:SDK 初始化及使用
使用美颜特效 SDK 生命周期大致如下:
1. 初始化美颜特效 SDK
/// root_path 传入 LightCore.bundle所在的目录/// Cocoapod集成时:[[NSBundle mainBundle] bundlePath]/// SPM集成时:[[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"Frameworks/XMagicResources.framework"]/// renderSize是图像分辨率,以720p为例NSDictionary *assetsDict = @{@"core_name" : @"LightCore.bundle",@"root_path" : @"这里传LightCore.bundle所在的目录路径"};self.xMagic = [[XMagic alloc] initWithRenderSize:CGSizeMake(720, 1280) assetsDict:assetsDict];
2. 设置美颜效果
/// 美白[self.xMagic setEffect:@"beauty.lutFoundationAlpha" effectValue:50 resourcePath:nil extraInfo:nil];/// 磨皮[self.xMagic setEffect:@"smooth.smooth" effectValue:50 resourcePath:nil extraInfo:nil];
3. 处理每帧数据并返回相应处理结果。
/// 以设备摄像头数据输出为例/// sampleBuffer:设备摄像头输出的数据-(CMSampleBufferRef)didProcessCPUData:(CMSampleBufferRef)sampleBuffer{CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);YTProcessInput *input = [[YTProcessInput alloc] init];input.pixelData = [[YTImagePixelData alloc] init];input.pixelData.data = pixelBuffer;input.dataType = kYTImagePixelData;YTProcessOutput *output = [self.xMagic process:input];if (output.pixelData.data != nil) { //output.pixelData.data:美颜SDK处理以后的数据CMSampleBufferRef outSampleBuffer = [self sampleBufferFromPixelBuffer:output.pixelData.data];return outSampleBuffer;}return nil;}/// PixelBuffer转sampleBuffer- (CMSampleBufferRef)sampleBufferFromPixelBuffer:(CVPixelBufferRef)pixelBuffer{CFRetain(pixelBuffer);CMSampleBufferRef outputSampleBuffer = NULL;CMSampleTimingInfo timing = {kCMTimeInvalid, kCMTimeInvalid, kCMTimeInvalid};CMVideoFormatDescriptionRef videoInfo = NULL;OSStatus result = CMVideoFormatDescriptionCreateForImageBuffer(NULL, pixelBuffer, &videoInfo);result = CMSampleBufferCreateForImageBuffer(kCFAllocatorDefault, pixelBuffer, true, NULL, NULL, videoInfo, &timing, &outputSampleBuffer);CFArrayRef attachments = CMSampleBufferGetSampleAttachmentsArray(outputSampleBuffer, YES);CFMutableDictionaryRef dict = (CFMutableDictionaryRef)CFArrayGetValueAtIndex(attachments, 0);CFDictionarySetValue(dict, kCMSampleAttachmentKey_DisplayImmediately, kCFBooleanTrue);CFRelease(videoInfo);CFRelease(pixelBuffer);return outputSampleBuffer;}
4. 释放美颜特效 SDK。
/// 在需要释放SDK资源的地方调用[self.xMagic deinit];