textureId はほとんど渡しません。Facebetter を相手のカスタム前処理コールバックに接続し、ImageFrame::CreateWithI420(または NV12)で ProcessImage を実行し、プレーンを相手のフレームへ書き戻します。
Linux と同一の C++ API を共有します。基本的な使い方: 美顔の実装。ルーム参加 / 配信はベンダーの公式ドキュメントに従ってください。
共通の契約
共通: I420 を処理してプレーンへ書き戻す
TRTC(Tencent Cloud)
Windows / デスクトップ C++: カスタム前処理は Buffer であり、Texture ではありません。新しい SDK ではenableLocalVideoCustomProcess + setLocalVideoCustomProcessCallback を使います(旧名 setLocalVideoProcessCallback は非推奨。統合しているバージョンに従ってください)。
ピクセル形式は I420、バッファタイプは Buffer を選びます。onProcessVideoFrame で srcFrame を処理し、dstFrame に書き込みます(またはドキュメントどおり dstFrame をその場で変更します)。
Tencent Cloud のドキュメントでは、モバイルは 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 のみです。

