Skip to main content
SDK 2.0.0。把 Facebetter 挂在第三方 SDK 的自定义视频前处理回调里:在对方提供的 OpenGL ES 线程上,用外部纹理跑 processImage,再把输出纹理交回对方。 完整纹理约定见 实现美颜 · 外部纹理。对方 SDK 的进房、推流、权限请以其官方文档为准;本页只写与 Facebetter 的接线。

共性约定

Facebetter 不接受 GL_TEXTURE_EXTERNAL_OES 作为 createWithTexture 输入。若对方默认给 OES,请先按其文档切到 Texture2D / RGB,或自行 blit 成 GL_TEXTURE_2D 再处理。

共用处理函数

各厂商回调里都可以复用下面的辅助方法(在 GL 线程调用):
创建引擎(同样在 GL 线程):
凭证与鉴权:订阅服务授权与许可

TRTC(腾讯云)

挂钩 API:TRTCCloud.setLocalVideoProcessListener。像素格式选 Texture_2D,缓冲类型选 TEXTURE onGLContextCreated 里创建 Facebetter;在 onProcessVideoFrame 里处理并写回 dstFrame.texture.textureId;在 onGLContextDestoryrelease()
取消监听或退房后释放引擎。更多说明见 TRTC 第三方美颜(以腾讯云当前文档为准)。 Flutter 工程请用 Flutter · 第三方对接(走 FacebetterPlugin.processTexture,不是本页的 Java API)。

声网 Agora

挂钩 API:RtcEngine.registerVideoFrameObserver(Video SDK 4.x)。需要:
  1. getVideoFrameProcessMode() 返回 PROCESS_MODE_READ_WRITE
  2. 尽量拿到 TextureBuffer,且类型为 RGB(GL_TEXTURE_2D
  3. onCaptureVideoFrame(或你选择的观测位置)里跑 Facebetter,再把处理后的纹理写回 VideoFrame
声网侧「如何把新 textureId 写回 VideoFrame」依赖其 TextureBuffer 工具类,不同大版本差异较大。Facebetter 只负责产出新的 GL_TEXTURE_2D;写回步骤以 Agora 视频帧观测 / API Reference 为准。
销毁 RtcEngine 前注销 observer,并 beautyEngine.release()

LiveKit

挂钩方式:创建本地视频轨时传入 org.webrtc.VideoProcessor(或等价的 track processor)。在 onFrameCaptured 里处理纹理,再通过 sink.onFrame(...) 送回。
也可自研 VideoCapturer,在采到纹理后先 processTexturecapturerObserver.onFrameCaptured。虚拟背景等官方 processor 见 LiveKit 的 livekit-android-track-processors 模块。

排错要点

相关文档