Skip to main content
SDK 2.0.0。Facebetter をサードパーティ SDK のカスタム動画前処理コールバックに接続します。相手が提供する OpenGL スレッド(またはピクセルバッファコールバック)上でフレームを処理し、相手へ返します。 iOS · サードパーティ連携 と同じ Objective-C API を共有します。差は主にランタイム環境(OpenGL、App Sandbox、プロセス名バインド)です。テクスチャの完全な契約: 美顔の実装 · 外部テクスチャ

共通の契約

Apple プラットフォームでは、TRTC カスタム前処理は OpenGL テクスチャが一般的です。Agora / LiveKit は CVPixelBuffer がより一般的です。どちらも使えますが、同じエンジンで 2 つのモードを混在させないでください。

共通: テクスチャ処理

エンジン作成(GL スレッド):

共通: 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 にします。
デリゲート解除または退室後にエンジンを解放します。詳細は Tencent Cloud の TRTC サードパーティ美顔 Flutter では Flutter · サードパーティ連携FacebetterPlugin.processTexture)を使います。

Agora

フック API: AgoraRtcEngineKit.setVideoFrameDelegate:(Video SDK 4.x)。macOS のキャプチャフレームも多くが CVPixelBuffer です。 必要なこと:
  1. getVideoFrameProcessModeReadWrite を返す
  2. onCapture:sourceType:(または旧名 onCaptureVideoFrame)で CVPixelBuffer を取り出す
  3. createWithNV12: / createWithBGRA: などで Facebetter に渡し、結果を AgoraOutputVideoFrame書き戻す
Agora macOS 側で CVPixelBuffer を書き戻す方法はメジャーバージョンで変わります。Facebetter は processImage: の出力が入力と同じフォーマットであることを保証します。AgoraOutputVideoFrame への差し込みは Agora の生動画処理 に従ってください。
エンジン破棄前に setVideoFrameDelegate:nil し、beautyEnginenil にします。

LiveKit

フック: Swift VideoProcessor を実装し、process(frame:) で処理して新しいフレームを返します(または nil でドロップ)。カメラトラック作成時に processor: を渡すか、あとから track.processor を設定します。
公式サンプルプロセッサ(背景ぼかしなど)は LiveKit Swift の BackgroundBlurVideoProcessor(macOS 12+)を参照してください。画面共有トラックにも同じ processor を付けられます(API は現在の LiveKit Swift に従ってください)。

トラブルシューティング

関連ドキュメント