textureId。把 Facebetter 挂在对方的自定义前处理回调里,用 ImageFrame::CreateWithI420(或 NV12)跑 ProcessImage,再把平面写回对方帧。
与 Linux 共用同一套 C++ API。基础用法见 实现美颜。对方进房 / 推流以其官方文档为准。
共性约定
共用:处理 I420 并写回平面
TRTC(腾讯云)
Windows / 桌面 C++:自定义前处理走 Buffer,不是 Texture。较新 SDK 使用enableLocalVideoCustomProcess + setLocalVideoCustomProcessCallback(旧名 setLocalVideoProcessCallback 已弃用,以你集成的版本为准)。
像素格式选 I420,缓冲类型选 Buffer。在 onProcessVideoFrame 里处理 srcFrame 并写入 dstFrame(或按文档原位改 dstFrame)。
腾讯云文档写明:移动端可用 Texture;PC 仅支持 Buffer。不要在 Windows 上按 Android 的
Texture_2D 路径接入。声网 Agora
挂钩:IRtcEngine::registerVideoFrameObserver(C++ Video SDK 4.x)。Windows 默认可拿到 YUV420 / I420。
getVideoFrameProcessMode返回PROCESS_MODE_READ_WRITE- 在
onCaptureVideoFrame里用yBuffer/uBuffer/vBuffer调用ProcessI420InPlace - 返回
true让 SDK 继续使用该帧
IRtcEngine 前注销 observer,并 engine.reset()。
LiveKit
桌面侧常见做法是:自定义视频源,自行采集 / 处理后把帧推给 LiveKit(C++ / 自研桥接),而不是移动端那种VideoProcessor 纹理回调。
推荐管线:
- 用你的摄像头 / DXGI / V4L2 等拿到帧
CreateWithI420/CreateWithRGBA→ProcessImage- 将输出封装成 LiveKit / WebRTC 可接受的帧,推入
VideoSource/RTCVideoSource
RtcVideoSource、VideoTrack 工厂等)随 LiveKit 客户端版本变化,请对照 LiveKit 客户端文档 的自定义轨道说明。Facebetter 只负责第 2 步。

