Skip to main content
SDK 2.0.0。桌面端与移动端不同:TRTC / 声网等在 Windows 上多为 CPU 缓冲(I420 / YUV),很少给 OpenGL 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
  1. getVideoFrameProcessMode 返回 PROCESS_MODE_READ_WRITE
  2. onCaptureVideoFrame 里用 yBuffer / uBuffer / vBuffer 调用 ProcessI420InPlace
  3. 返回 true 让 SDK 继续使用该帧
销毁 IRtcEngine 前注销 observer,并 engine.reset()

LiveKit

桌面侧常见做法是:自定义视频源,自行采集 / 处理后把帧推给 LiveKit(C++ / 自研桥接),而不是移动端那种 VideoProcessor 纹理回调。 推荐管线:
  1. 用你的摄像头 / DXGI / V4L2 等拿到帧
  2. CreateWithI420 / CreateWithRGBAProcessImage
  3. 将输出封装成 LiveKit / WebRTC 可接受的帧,推入 VideoSource / RTCVideoSource
具体类名(RtcVideoSourceVideoTrack 工厂等)随 LiveKit 客户端版本变化,请对照 LiveKit 客户端文档 的自定义轨道说明。Facebetter 只负责第 2 步。

排错要点

相关文档