跳转到主要内容
本文档对应 SDK 2.0.0。美妆 / 美型枚举见 参数枚举。

选择正确的帧类型

在 processImage: 之前设置 FBImageFrame.type。引擎方法没有独立的处理模式参数。
  • FBFrameTypeVideo(1):相机预览、直播、通话,延迟更低。
  • FBFrameTypeImage(0):静图,效果更好。

相册大图(预览与导出)

高分辨率静图不要在每次拖动滑条时把原图像素送进 processImage:,也不要缩放后丢掉原图。 打开照片时保留完整 UIImage,并另做一份预览帧(长边约 1280–1440,createWithUIImage:)。调参打预览(FBFrameTypeImage);导出对全尺寸帧再处理一次,同一套 setter。输出尺寸等于输入。摄像头预览仍用采集分辨率 + FBFrameTypeVideo。

参数范围

  • 美肤 / 美妆 / 滤镜强度:[0.0, 1.0]。0 关闭该项。
  • 美型(setReshape:intensity:):[-1.0, 1.0]。0 关闭。正负为相反方向。
实时预览建议从较小值开始。枚举含义见 参数枚举。

一个引擎、一条串行队列

createEngineWithConfig: 返回的是实例,不是进程级单例。每个会话保留一个引擎,并在串行队列上调用(externalContext = YES 时则在 GL 线程)。
除极小静图外,不要在主线程处理。不要让多个并发队列同时访问同一个引擎。

内存

  • 使用 ARC,用完将 FBImageFrame 置 nil。
  • 相机已是 NV12 / BGRA 时,不要每帧先转成 RGBA。
  • 滤镜和贴纸在下一次 processImage:(GL 线程)才创建纹理。不要每帧 setFilter: / setSticker:,改强度用 setFilterIntensity:。
  • 用 clearFilter、clearSticker、clearVirtualBackground、clearChromaKey,不要另建引擎。

外部 OpenGL ES

应用已有 GL 上下文时:
  1. 设置 config.externalContext = YES。
  2. 在该 GL 线程创建引擎。
  3. 用 createWithTexture:width:height:stride: 包装纹理。
  4. 输出用 [output texture]。
输入纹理、引擎、输出纹理必须在同一上下文。

用 getStats 监控

优先使用 FBEngineStats,不必自建计时器:
30 fps 时 avgProcessTimeMs 宜低于约 33 ms。偏高则降分辨率、改用 FBFrameTypeVideo,或关掉不用的美妆 / 贴纸。

生命周期

引擎用 ViewController(或会话对象)的 strong 属性持有。会话结束在 dealloc 里置 nil。在 viewWillDisappear / applicationDidEnterBackground 停止采集,从而停止调用 processImage:——没有单独的 pause API。
FBEngineCallbacks 的 block 里用 __weak,避免循环引用。

iOS 采集

  • 预览多为 NV12 或 BGRA,用 createWithNV12:... / createWithBGRA:...。
  • 前置摄像头:对帧 setMirror:@"horizontal"(需要先翻转像素时用 mirror:)。
  • 相机权限:Info.plist 的 NSCameraUsageDescription。相册选图:NSPhotoLibraryUsageDescription。

测试

  • 绑定测试 App 的 Bundle ID,使用真实 appId / appKey 或 licenseToken。占位字符串会触发授权事件 1 / 101。
  • 覆盖静图(FBFrameTypeImage + createWithUIImage:)和实时(FBFrameTypeVideo)。
  • 断言 setter 返回 FBErrorCode_Success。