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

共性约定

Apple 平台上 TRTC 自定义前处理常用 OpenGL 纹理;声网 / LiveKit 更常见 CVPixelBuffer。两种路径都可,不要混用同一台引擎的两种模式。

共用:处理纹理

创建引擎(GL 线程):

共用:处理 CVPixelBuffer(NV12 示意)

声网 / LiveKit 回调里常见 NV12。平面指针与 stride 取自 CVPixelBuffer;写回对方帧的方式随厂商版本变化。
像素缓冲路径下创建引擎时设 externalContext = NO。凭证:订阅服务授权与许可

TRTC(腾讯云)

挂钩 API:setLocalVideoProcessDelegete:pixelFormat:bufferType:(官方拼写为 Delegete)。像素格式 TRTCVideoPixelFormat_Texture_2D,缓冲类型 TRTCVideoBufferType_Texture 实现 TRTCVideoFrameDelegate:在 onGLContextCreated 创建引擎;在 onProcessVideoFrame:dstFrame: 写回 dstFrame.textureId;在 onGLContextDestory 将引擎置 nil
取消委托或退房后释放引擎。详见腾讯云 TRTC 第三方美颜 Flutter 请用 Flutter · 第三方对接FacebetterPlugin.processTexture)。

声网 Agora

挂钩 API:AgoraRtcEngineKit.setVideoFrameDelegate:(Video SDK 4.x)。iOS 上采集帧多为 CVPixelBuffertextureBuf / format 12),而不是 Android 那种 GL_TEXTURE_2D id。 需要:
  1. getVideoFrameProcessMode 返回 ReadWrite
  2. onCapture:sourceType:(或旧名 onCaptureVideoFrame)里取出 CVPixelBuffer
  3. createWithNV12: / createWithBGRA: 等喂给 Facebetter,再把结果写回 AgoraOutputVideoFrame
声网 iOS 侧写回 CVPixelBuffer 的方式随大版本变化。Facebetter 保证 processImage: 输出与输入同格式;如何塞回 AgoraOutputVideoFrameAgora 原始视频处理 为准。
销毁引擎前 setVideoFrameDelegate:nil,并将 beautyEnginenil

LiveKit

挂钩方式:实现 Swift VideoProcessor,在 process(frame:) 里处理,再返回新帧(或 nil 丢帧)。创建相机轨时传入 processor:,或之后设置 track.processor
官方示例处理器(如背景模糊)见 LiveKit Swift 的 BackgroundBlurVideoProcessor。自研 capturer 时,也可在送入编码器前先跑 Facebetter。

排错要点

相关文档