Skip to main content
SDK 2.0.0。Flutter 只设置美颜参数。实时视频帧不进 Dart:在对方 SDK 的 原生 GL 线程上调用 FacebetterPlugin.processTexture,再把输出纹理写回对方帧。

共性约定

不要在这台实时引擎上调用 processFile / processImageBytes / processImageFile / processImageToUiImage
凭证:订阅服务授权与许可。原生侧纹理约定还可对照 Android · 第三方对接iOS · 第三方对接 不要: 从 Dart 每帧传像素或 texture id;在非 GL 线程调 processTexture;把 FBEngine 当进程级单例。

TRTC(腾讯云)

前置:工程已接入 tencent_trtc_cloud(或原生 TRTC)、facebetter_flutter: ^2.0.0。打开自定义前处理时指定 Texture2D + Texture buffer,不要走 YUV / PixelBuffer。 Dart 侧创建引擎后打开自定义前处理(方法名随插件版本可能略有差异):

iOS — onProcessVideoFrame

若使用 tencent_trtc_cloudITXCustomBeautyProcesser,像素格式仍选 Texture2D / Texture,在回调里调同一个 processTexture。工厂注册必须在 GeneratedPluginRegistrant.register(with:) 之后

Android — Kotlin

销毁


声网 Agora

挂钩思路与原生一致:在 iOS / Android 原生的视频帧观测 / 自定义前处理回调里调用 FacebetterPlugin.processTexture,Dart 只负责 FBEngine 参数。
  1. Dart:FBEngine.create(externalContext: true) 并设置美颜
  2. 按 Agora Flutter 插件文档打开自定义视频处理或注册原生 observer(API 随 agora_rtc_engine 版本变化)
  3. 在原生回调拿到 GL_TEXTURE_2D textureId 后调用 processTexture,写回对方帧
OES / 仅 YUV 的回调需先转成 Texture2D,或对照 Android / iOS 的像素路径说明(Flutter 实时路径仍优先纹理 + processTexture)。 销毁:先注销 Agora 前处理,再 engine.dispose()

LiveKit

同样:Dart 设参数,原生处理纹理
  1. Dart 创建 externalContext: true 的引擎
  2. 用 LiveKit Flutter / 原生自定义 capturer 或 video processor 拿到纹理帧
  3. GL 线程调用 FacebetterPlugin.processTexture,再把输出送回 LiveKit 轨
具体挂点随 livekit_client 与平台实现变化;纹理约定见 Android · LiveKitiOS · LiveKit

相关文档