跳转到主要内容

添加 SDK 依赖

方法 A:Maven 在线集成(推荐)

在项目根目录的 build.gradle 或 settings.gradle 中配置仓库:
模块 build.gradle:
Version Catalog(gradle/libs.versions.toml):

方法 B:本地 AAR

前往 下载 获取 SDK,将 facebetter.aar 放到 libs/,然后:

权限配置

AndroidManifest.xml:
API 23+ 需在运行时申请 CAMERA。

导入类

日志配置

默认关闭日志。必须在 new BeautyEffectEngine(...) 之前 开启。
请在创建引擎之前调用 setLogConfig,否则看不到初始化日志。

创建引擎

凭证获取见 订阅服务。鉴权细节见 授权与许可。 licenseToken 非空时使用该 token(许可证 token / {token} JSON / 离线 .lic)。否则用 appId + appKey 请求 /facebetter/v2/auth。
构造函数不会返回 null;配置无效会抛异常。异步初始化结果通过 EngineEventCode.INITIALIZATION_COMPLETE / INITIALIZATION_FAILED 回调通知。

美颜

强度 [0.0, 1.0]。0 表示关闭。成功返回 ErrorCode.SUCCESS(0)。
开启 setBeautySkinOnly(true) 后,磨皮 / 美白 / 锐化 / 红润只作用于检测到的皮肤,衣服和背景不受影响。
风格枚举见 参数枚举。

整形

范围 [-1.0, 1.0]。0 为关闭。
全部 26 个参数(FACE_THIN … BROW_THICKNESS)及正负方向见 参数枚举。

美体

范围 [0.0, 1.0]。0 关闭。先用 addResourcePack 登记 resource_body.fbd(不在 AAR 内)。见 参数枚举 与 可选资源包。

美妆

先设强度,再设风格和/或颜色。
完整预设置见 参数枚举。

虚拟背景与色度键

模糊(0 会清除)、静态图,或色度键遮罩 + 填充。
clearChromaKey() 会恢复肖像分割,不会去掉当前的模糊/图片填充。

滤镜与贴纸

从文件路径或 assets 加载 .fbd。无需注册步骤。
3D 贴纸需要可选包 resource_3d.fbd(不在 AAR 内)。见 可选资源包。从应用 assets 登记后再设置 3D 贴纸 .fbd:
滤镜 / 贴纸在下一帧处理后生效。

回调与统计

处理图像

你创建的每一帧以及 processImage 的输出都必须调用 ImageFrame.release(),否则会泄漏原生内存。
将 ImageFrame.type 设为 FrameType.IMAGE(静图)或 FrameType.VIDEO(相机 / 直播)。processImage 只接收帧,没有额外的模式参数。
从文件或 Bitmap:
相机传感器有旋转时,处理前先旋转 / 镜像:
引擎会保持输入输出像素格式一致(NV21 进则 NV21 出,RGBA 进则 RGBA 出)。
用 getData() / 平面访问器读像素,或先转换:

相机管线

Camera2 YUV_420_888 → 引擎 → 显示的典型流程:

外部纹理(OpenGL ES)

必须在 GL 线程上以 externalContext = true 创建引擎。输入、输出纹理须属于同一上下文。
适合应用已用 OpenGL ES 渲染、希望避免 CPU 往返拷贝的场景。
输入 GL_TEXTURE_2D 建议的采样参数:
注意:
  • 输入纹理为 GL_TEXTURE_2D,一般为 RGBA;stride 通常为 width * 4
  • 在第一次 GL 回调里惰性创建引擎,确保上下文已绑定
  • 输出纹理由 SDK 持有,不要 glDeleteTextures;释放对应的 ImageFrame 即可
  • GL 上下文丢失后,先 release() 再在新上下文中重建引擎
  • 实时 GL 管线使用 FrameType.VIDEO
  • 接入 TRTC / 声网 / LiveKit 等推流或会议 SDK:见 第三方对接

生命周期

在 onDestroy / onDetach 中调用 engine.release()。不释放会泄漏 GPU 与原生内存。

相关文档