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

集成

创建引擎返回 nil

  • 确认已设置 licenseToken 或 appId + appKey。两者都有时以 token 为准。
  • 绑定 Mac Bundle ID(命令行工具:进程名)。
  • 在线授权需要 App Sandbox 的 Outgoing Connections,并能访问 /facebetter/v2/auth。
  • 在 createEngineWithConfig: 之前打开日志,关注事件 1 / 101。
  • CocoaPods:pod 'Facebetter', '2.0.0'。打开 .xcworkspace。

编译找不到头文件或类

  • 导入 #import <Facebetter/FBBeautyEffectEngine.h>。
  • 手动 .framework:Embed & Sign。
  • Xcode 15+ CocoaPods 沙盒:将 ENABLE_USER_SCRIPT_SANDBOXING 设为 No。

运行时链接 / dyld 错误

  • 架构:x86_64 与 arm64。
  • 部署目标 macOS 10.15+。

授权

licenseToken 与 appId / appKey

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

事件 1 或 101

授权或初始化失败。检查 Bundle ID、沙盒网络、token 是否过期以及日志。

美颜

效果太弱或太强

  • 美肤 / 美妆 / 滤镜:[0.0, 1.0]。
  • 美型:通过 setReshape:intensity: 使用 [-1.0, 1.0]。
  • 美体:通过 setBodyReshape:intensity: 使用 [0.0, 1.0]。先登记 resource_body.fbd。
  • 强度为 0 即关闭该项。
  • 仅皮肤区域:setBeautySkinOnly:。
预设名称见 参数枚举。

滤镜、贴纸、虚拟背景

传 .fbd 路径或字节。沙盒应用必须能读该路径。
虚拟背景:

处理

processImage: 返回 nil

帧无效、初始化失败,或 externalContext = YES 但当前没有 GL 上下文。

帧类型

将 imageFrame.type 设为 FBFrameTypeImage(0)或 FBFrameTypeVideo(1)。没有处理模式参数。

格式转换

使用 convert::

NSImage

相机

  1. AVCaptureVideoDataOutput → CVPixelBuffer。
  2. createWithNV12:... 或 createWithBGRA:...。
  3. type = FBFrameTypeVideo,可选 setMirror:@"horizontal"。
  4. 在 AppKit / OpenGL 视图中显示 [output data] 或 [output texture]。

性能

  • 实时用 FBFrameTypeVideo;关注 getStats。
  • 一个引擎、串行队列。
  • 窗口最小化时暂停采集。

日志

日志写到沙盒容器内。返回码见 错误处理。

版本

  • macOS 10.15+,x86_64 + arm64。
  • CocoaPods:pod 'Facebetter', '2.0.0'。
  • Universal Binary:确认 xcframework 含两个切片(lipo -info)。

沙盒与 App Store

  • 在线授权需要出站网络。
  • 相机需要 NSCameraUsageDescription。
  • 用户选择的文件使用 security-scoped bookmark。
  • 不要使用私有 API;实时视频不要在主线程跑引擎。