Skip to main content
SDK 2.0.0。Facebetter をサードパーティ SDK のカスタム動画前処理コールバックに接続します。相手が提供する OpenGL ES スレッド(またはピクセルバッファコールバック)上でフレームを処理し、相手へ返します。 テクスチャの完全な契約: 美顔の実装 · 外部テクスチャ。ルーム参加、配信、権限はベンダーの公式ドキュメントに従います。このページは Facebetter の配線のみです。

共通の契約

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)。iOS のキャプチャフレームは多くが CVPixelBuffertextureBuf / format 12)で、Android のような GL_TEXTURE_2D id ではありません。 必要なこと:
  1. getVideoFrameProcessModeReadWrite を返す
  2. onCapture:sourceType:(または旧名 onCaptureVideoFrame)で CVPixelBuffer を取り出す
  3. createWithNV12: / createWithBGRA: などで Facebetter に渡し、結果を AgoraOutputVideoFrame書き戻す
Agora iOS 側で CVPixelBuffer を書き戻す方法はメジャーバージョンで変わります。Facebetter は processImage: の出力が入力と同じフォーマットであることを保証します。AgoraOutputVideoFrame への差し込みは Agora の生動画処理 に従ってください。
エンジン破棄前に setVideoFrameDelegate:nil し、beautyEnginenil にします。

LiveKit

フック: Swift VideoProcessor を実装し、process(frame:) で処理して新しいフレームを返します(または nil でドロップ)。カメラトラック作成時に processor: を渡すか、あとから track.processor を設定します。
公式サンプルプロセッサ(背景ぼかしなど)は LiveKit Swift の BackgroundBlurVideoProcessor を参照してください。自作 capturer でも、エンコーダへ送る前に Facebetter を実行できます。

トラブルシューティング

関連ドキュメント