跳转到主要内容
本文档对应 SDK 2.0.0。授权见 授权与许可。枚举见 参数枚举。

集成

创建引擎返回 nil

  • 确认已设置 licenseToken 或 appId + appKey。两者都有时以 token 为准。
  • 在控制台绑定应用 Bundle ID。
  • 在线授权需要能访问 /facebetter/v2/auth。
  • 在 createEngineWithConfig: 之前打开日志,关注事件 1(授权失败)和 101(初始化失败)。
  • CocoaPods:pod 'Facebetter', '2.0.0'。打开 .xcworkspace,不要打开 .xcodeproj。

编译找不到头文件或类

  • 导入 #import <Facebetter/FBBeautyEffectEngine.h>。
  • 手动集成 .framework 时设置为 Embed & Sign。
  • Clean Build Folder 后重建。
  • Xcode 15+ CocoaPods 脚本失败时,将 ENABLE_USER_SCRIPT_SANDBOXING 设为 No。

运行时链接 / dyld 错误

  • 架构必须是 arm64。
  • 部署目标 iOS 12.0+。
  • 确认 Facebetter.framework 已加入 Embed Frameworks。

授权

licenseToken 与 appId / appKey

licenseToken 非空时,SDK 在本地校验 token / {token} JSON / .lic,不会再发 appId / appKey。否则走在线授权。详见 授权与许可。

事件 1 或 101

授权或初始化失败。检查 Bundle ID、套餐、token 是否过期以及日志。创建返回非 nil 不够,还要监听 onEngineEvent。

美颜

效果太弱或太强

  • 美肤 / 美妆 / 滤镜:[0.0, 1.0]。
  • 美型:通过 setReshape:intensity: 使用 [-1.0, 1.0](0 关闭)。
  • 美体:通过 setBodyReshape:intensity: 使用 [0.0, 1.0]。先登记 resource_body.fbd。
  • 强度为 0 即关闭该项。
  • 仅皮肤区域:setBeautySkinOnly:。
美妆 / 美型取值见 参数枚举。Objective-C 形如 FBReshape_FaceThin、FBLipstickColor_Rouge。

滤镜、贴纸、虚拟背景

滤镜或贴纸没有效果

直接传 .fbd 路径或字节:
在下一次 processImage: 处理后生效。空路径 / nil 数据返回 FBErrorCode_InvalidArgument。文件不存在返回 FBErrorCode_IO。

虚拟背景

色键只负责遮罩,填充仍是模糊或替换图:

处理

processImage: 返回 nil

  • 引擎为 nil 或初始化失败(-2 / 事件 101)。
  • 帧无效(尺寸为 0、格式不支持)。
  • externalContext = YES 但当前线程没有 GL 上下文。
  • 按处理失败(FBErrorCode_Process)处理。

帧类型

将 imageFrame.type 设为 FBFrameTypeImage(0)或 FBFrameTypeVideo(1)。不要再传处理模式参数。

格式转换

使用 convert: 和帧访问器:
YUV:dataY / dataU / dataV / dataUV 及对应 stride*。

UIImage

相机预览

  1. 从 AVCaptureVideoDataOutput 取 CVPixelBuffer。
  2. 用 createWithNV12:... 或 createWithBGRA:... 创建 FBImageFrame。
  3. 设置 type = FBFrameTypeVideo,可选 setMirror:@"horizontal"。
  4. processImage: 后显示 [output data] 或 [output texture]。

性能与内存

  • 实时用 FBFrameTypeVideo;若 getStats.avgProcessTimeMs 偏高则降分辨率。
  • 一个引擎、串行队列;不要在主线程处理。
  • 用 ARC 释放帧(frame = nil),复用采集 buffer。
  • 避免每帧 setFilter: / setSticker:。

日志

返回码:0 成功,-1 参数无效,-2 未初始化。完整列表见 错误处理。

版本

  • iOS 12.0+,arm64。
  • CocoaPods:pod 'Facebetter', '2.0.0'。
  • 升级后执行 pod install、Clean Build Folder,再验证授权和 processImage:。

线程

  • 默认引擎:所有 processImage: 以及触及 GL 资源的 setter 走串行队列。
  • externalContext = YES:在 GL 线程创建并处理。
  • 仅在主队列更新 UI。