共通の契約
Apple プラットフォームでは、TRTC カスタム前処理は OpenGL テクスチャが一般的です。Agora / LiveKit は
CVPixelBuffer がより一般的です。どちらも使えますが、同じエンジンで 2 つのモードを混在させないでください。
共通: テクスチャ処理
共通: CVPixelBuffer の処理(NV12 の例)
Agora / LiveKit コールバックでは NV12 が一般的です。プレーンポインタと stride はCVPixelBuffer から取得します。相手フレームへの書き戻しはベンダーバージョンで変わります。
externalContext = NO を設定します。認証情報: サブスクリプション、認証とライセンス。
TRTC(Tencent Cloud)
フック API:setLocalVideoProcessDelegete:pixelFormat:bufferType:(公式の綴りは Delegete)。ピクセルフォーマット TRTCVideoPixelFormat_Texture_2D、バッファタイプ TRTCVideoBufferType_Texture。
TRTCVideoFrameDelegate を実装します。onGLContextCreated でエンジンを作成し、onProcessVideoFrame:dstFrame: で dstFrame.textureId を書き戻し、onGLContextDestory でエンジンを nil にします。
FacebetterPlugin.processTexture)を使います。
Agora
フック API:AgoraRtcEngineKit.setVideoFrameDelegate:(Video SDK 4.x)。iOS のキャプチャフレームは多くが CVPixelBuffer(textureBuf / format 12)で、Android のような GL_TEXTURE_2D id ではありません。
必要なこと:
getVideoFrameProcessModeが ReadWrite を返すonCapture:sourceType:(または旧名onCaptureVideoFrame)でCVPixelBufferを取り出すcreateWithNV12:/createWithBGRA:などで Facebetter に渡し、結果をAgoraOutputVideoFrameに書き戻す
setVideoFrameDelegate:nil し、beautyEngine を nil にします。
LiveKit
フック: SwiftVideoProcessor を実装し、process(frame:) で処理して新しいフレームを返します(または nil でドロップ)。カメラトラック作成時に processor: を渡すか、あとから track.processor を設定します。
BackgroundBlurVideoProcessor を参照してください。自作 capturer でも、エンコーダへ送る前に Facebetter を実行できます。

