集成 TEBeautyKit

功能说明

TEBeautyKit 是美颜特效美颜模块的 UI 面板库,用于客户快速方便的使用和管理美颜功能,效果如下图:


集成步骤

1. 下载并解压 TEBeautyKit
2. 把 TEBeautyKit 文件夹拷贝到自己的工程中,和 podfile 同级目录。
3. 编辑 podfile 文件,添加下面的代码:
pod 'TEBeautyKit',:path => 'TEBeautyKit/TEBeautyKit.podspec'
4. 执行 pod install

使用指引

1. 美颜鉴权
app 启动以后,需要进行一次美颜鉴权,才能正常使用美颜功能。
接口:
#import "TEBeautyKit.h"
+ (void)setTELicense:(NSString *)url key:(NSString *)key completion:(callback _Nullable )completion;
示例:
[TEBeautyKit setTELicense:@"your license" key:@"your key" completion:^(NSInteger authresult, NSString * _Nullable errorMsg) {
NSLog(@"----------result: %zd %@",authresult,errorMsg);
}];
2. 配置美颜素材路径
美颜面板上面的美颜数据都是从 TEBeautyKit/Assets/json/beauty_panel/ 目录下,根据不同美颜套餐中对应的 json 文件中解析出来。
接口:
#import "TEUIConfig.h"
/// 根据美颜套餐设置美颜面板的数据
/// - Parameter panelLevel: 美颜套餐
/// 美颜套餐类型:A1_00,A1_01,A1_02,A1_03,A1_04,A1_05,A1_06,S1_00,S1_01,S1_02,S1_03,S1_04,S1_05,S1_06,S1_07
-(void)setPanelLevel:(TEPanelLevel)panelLevel;
示例:
//如果
[[TEUIConfig shareInstance] setPanelLevel:S1_07];
3. 初始化并添加 TEPanelView
-(TEPanelView *)tePanelView{
if (!_tePanelView) {
_tePanelView = [[TEPanelView alloc] init:nil comboType:nil];
_tePanelView.delegate = self;
}
return _tePanelView;
}
[self.view addSubview:self.tePanelView];
[self.tePanelView mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.mas_equalTo(self.view);
make.centerX.mas_equalTo(self.view);
make.height.mas_equalTo(200);
make.bottom.mas_equalTo(self.view.mas_bottom);
}];
4. 创建美颜对象
接口:

//创建TEBeautyKit对象,effectMode: EFFECT_MODE_NORMAL(高性能模式) EFFECT_MODE_PRO(默认模式)
+ (void)createXMagic:(EffectMode)effectMode onInitListener:(OnInitListener _Nullable )onInitListener;
//创建TEBeautyKit对象,不开启高性能模式
+ (void)create:(OnInitListener _Nullable )onInitListener;
示例:

- (void)initXMagic {
__weak __typeof(self)weakSelf = self;
[TEBeautyKit createXMagic:EFFECT_MODE_PRO onInitListener:^(TEBeautyKit * _Nullable api) {
__strong typeof(self) strongSelf = weakSelf;
strongSelf.teBeautyKit = api;
strongSelf.tePanelView.teBeautyKit = strongSelf.teBeautyKit;
[strongSelf.tePanelView setDefaultBeauty];
[strongSelf.teBeautyKit setLogLevel:YT_SDK_ERROR_LEVEL];
// [strongSelf.teBeautyKit registerSDKEventListener:strongSelf];
}];
}

5. 处理视频数据
接口:
/**
textureId:纹理id
textureWidth:纹理宽度
textureHeight:纹理高度
origin:枚举值(YtLightImageOriginTopLeft、YtLightImageOriginBottomLeft),设置成YtLightImageOriginBottomLeft 时,图像上下镜像翻转
orientation:枚举值:图像旋转角度
*/
- (YTProcessOutput *)processTexture:(int)textureId
textureWidth:(int)textureWidth
textureHeight:(int)textureHeight
withOrigin:(YtLightImageOrigin)origin
withOrientation:(YtLightDeviceCameraOrientation)orientation

示例:
#pragma mark - TRTCVideoFrameDelegate
- (uint32_t)onProcessVideoFrame:(TRTCVideoFrame *_Nonnull)srcFrame dstFrame:(TRTCVideoFrame *_Nonnull)dstFrame {
if(!_teBeautyKit){
[self initXMagic];
}
YTProcessOutput *output = [self.teBeautyKit processTexture:srcFrame.textureId
textureWidth:srcFrame.width textureHeight:srcFrame.height
withOrigin:YtLightImageOriginTopLeft withOrientation:YtLightCameraRotation0];
dstFrame.textureId = output.textureData.texture;
return 0;
}
6. 销毁美颜
- (void)destroyXMagic{
[self.teBeautyKit onDestroy];
self.teBeautyKit=nil;
}

附录

面板 JSON 文件说明

美颜、美体 。



字段
说明
displayName
中文名称
displayNameEn
英文名称
icon
图片地址,支持设置本地图片和网络图片,本地图片支持 assets 资源和 SD 资源,assets 图片如上图所示,SD 卡图片设置图片全路径,网络图片设置对应的 http 链接
sdkParam
美颜 SDK 需要用到的属性,共包含四个属性,可参考美颜参数表
effectName
美颜属性 key,参考 属性参数表
effectValue
设置属性强度,参考 属性参数表
resourcePath
设置资源路径,参考 属性参数表
extraInfo
设置其他信息,参考 属性参数表
滤镜、动效贴纸、分割 。



由于滤镜和动效贴纸、分割的配置基本一致,所以此处用滤镜的 JSON 进行说明,这里新增了 downloadPath 和 resourceUri 字段。
字段
说明
downloadPath
如果您的滤镜素材是网络下载,那么这里配置的是您素材下载后在本地的存放位置,这里是相对路径,全路径是
TEDownloader.h中设置的basicPath+此处设置的路径.
resourceUri
如果您的素材是需要通过网络下载的,那么这里配置网络地址,如上图第三个红框,如果您的滤镜素材在本地,则按照上图配置对应的本地地址。
风格整妆



在风格整妆中增加了 extraInfo下的 makeupLutStrength字段,此字段用于调节风格整妆素材中滤镜的强度(如果此风格整妆素材支持调节滤镜强度就进行配置),此字段可参考美颜参数表。

TEBeautyKit 方法说明

//创建TEBeautyKit对象,effectMode: EFFECT_MODE_NORMAL(高性能模式) EFFECT_MODE_PRO(默认模式)
+ (void)createXMagic:(EffectMode)effectMode onInitListener:(OnInitListener _Nullable )onInitListener;
//创建TEBeautyKit对象,不开启高性能模式
+ (void)create:(OnInitListener _Nullable )onInitListener;
/**
创建TEBeautyKit对象
isEnableHighPerformance:是否开启高性能模式
高性能模式开启后,美颜占用的系统 CPU/GPU 资源更少,可减少手机的发热和卡顿现象,更适合低端机长时间用。
注意:开启高性能模式后,以下美颜项将不可用:
1. 眼部:眼宽、眼高、祛眼袋
2. 眉毛:角度、距离、高度、长度、粗细、眉峰
3. 嘴部:微笑唇
4. 面部:瘦脸(自然,女神,英俊),收下颌,祛皱、祛法令纹。建议用“脸型”实现综合大眼瘦脸效果
*/
+ (void)create:(BOOL)isEnableHighPerformance onInitListener:(OnInitListener _Nullable )onInitListener;
//美颜鉴权
+ (void)setTELicense:(NSString *)url key:(NSString *)key completion:(callback _Nullable )completion;
//设置美颜对象
- (void)setXMagicApi:(XMagic *_Nullable)xmagicApi;
//美颜静音
- (void)setMute:(BOOL)isMute;
/**
* 设置某个特性的开或关
*
* @param featureName 取值见 XmagicConstant.FeatureName
* @param enable true表示开启,false表示关闭
*/
- (void)setFeatureEnableDisable:(NSString *_Nullable)featureName enable:(BOOL)enable;

/// 设置帧同步模式
/// @isSync 是否是同步
/// @syncFrameCount同步的帧数。-1表示无限制。如果isSync为false,则此参数无意义
- (void)setSyncMode:(BOOL)isSync syncFrameCount:(int)syncFrameCount;

//处理图片美颜
- (UIImage *_Nullable)processUIImage:(UIImage *_Nullable)inputImage
imageWidth:(int)imageWidth
imageHeight:(int)imageHeight
needReset:(bool)needReset;
//处理texture
- (YTProcessOutput *_Nullable)processTexture:(int)textureId
textureWidth:(int)textureWidth
textureHeight:(int)textureHeight
withOrigin:(YtLightImageOrigin)origin
withOrientation:(YtLightDeviceCameraOrientation)orientation;
//处理CVPixelBufferRef
- (YTProcessOutput * _Nullable)processPixelData:(CVPixelBufferRef _Nullable )pixelData
pixelDataWidth:(int)pixelDataWidth
pixelDataHeight:(int)pixelDataHeight
withOrigin:(YtLightImageOrigin)origin
withOrientation:(YtLightDeviceCameraOrientation)orientation;
//设置美颜
- (void)setEffect:(TESDKParam *_Nullable)sdkParam;
//设置美颜list
- (void)setEffectList:(NSArray<TESDKParam *>*_Nullable)sdkParamList;
//是否开启了美颜增强模式
- (BOOL)isEnableEnhancedMode;
//是否开启美颜增强模式
- (void)enableEnhancedMode:(BOOL)enable;
//获取正在使用的美颜数据
- (NSString *_Nullable)exportInUseSDKParam;
//获取保存的美颜数据,下次进入美颜的时候,调用setEffectList,即可恢复相同的美颜效果
- (NSMutableArray<TESDKParam *> *_Nonnull)getInUseSDKParamList;
//恢复美颜
- (void)onResume;
//暂停美颜
- (void)onPause;
//销毁美颜
- (void)onDestroy;
//获取当前texture的图片
- (void)exportCurrentTexture:(void (^_Nullable)(UIImage * _Nullable image))callback;
//设置log
- (void)setLogLevel:(YtSDKLoggerLevel)level;
//设置AIDataListener
- (void)setAIDataListener:(id<TEBeautyKitAIDataListener> _Nullable)listener;
//设置TipsListener
- (void)setTipsListener:(id<TEBeautyKitTipsListener> _Nullable)listener;
//保存设置的美颜数据
- (void)saveEffectParam:(TESDKParam *_Nonnull)sdkParam;
//删除某个保存的美颜数据
- (void)deleteEffectParam:(TESDKParam *_Nonnull)sdkParam;
//清空保存的美颜数据
- (void)clearEffectParam;

TEUIConfig 说明

//可在外部修改下列属性的颜色
//美颜面板背景色
@property(nonatomic,strong)UIColor *panelBackgroundColor;
//分割线颜色
@property(nonatomic,strong)UIColor *panelDividerColor;
//选中项颜色
@property(nonatomic,strong)UIColor *panelItemCheckedColor;
//文本颜色
@property(nonatomic,strong)UIColor *textColor;
//文本选中颜色
@property(nonatomic,strong)UIColor *textCheckedColor;
//进度条颜色
@property(nonatomic,strong)UIColor *seekBarProgressColor;

/// 根据美颜套餐设置美颜面板的数据,推荐使用
/// - Parameter panelLevel: 美颜套餐
/// 美颜套餐类型:A1_00,A1_01,A1_02,A1_03,A1_04,A1_05,A1_06,S1_00,S1_01,S1_02,S1_03,S1_04,S1_05,S1_06,S1_07
-(void)setPanelLevel:(TEPanelLevel)panelLevel;
/**
配置美颜面板数据
beauty:美颜json路径
beautyBody:美体json路径
lut:滤镜json路径
motion:动效json路径
makeup:美妆json路径
segmentation:背景分割json路径
lightMakeup: 轻美妆路径
*/
-(void)setTEPanelViewRes:(NSString *)beauty
beautyBody:(NSString *)beautyBody
lut:(NSString *)lut
motion:(NSString *)motion
makeup:(NSString *)makeup
segmentation:(NSString *)segmentation
lightMakeup:(NSString *)lightMakeup;

TEPanelView 说明

//初始化美颜面板,abilityType和comboType都填nil即可
- (instancetype)init:(NSString *)abilityType comboType:(NSString *)comboType;

@protocol TEPanelViewDelegate <NSObject>
//设置了美颜以后回调
- (void)setEffect;
@end