Skip to main content
SDK 2.0.0。Facebetter をサードパーティ SDK のカスタム動画前処理コールバックに接続します。その SDK の OpenGL ES スレッド上で、外部テクスチャに対して processImage を実行し、出力テクスチャを返します。 テクスチャの完全なルール: 美顔の実装 · 外部テクスチャ。ルーム参加、配信、権限はベンダーのドキュメントに従います。このページは Facebetter の接続のみを扱います。

共通の契約

Facebetter は createWithTextureGL_TEXTURE_EXTERNAL_OES受け付けません。ベンダーが OES をデフォルトにする場合は、ドキュメントに従い Texture2D / RGB に切り替えるか、先に GL_TEXTURE_2D へ blit してください。

共通ヘルパー

各ベンダーの GL コールバックで再利用します(GL スレッドで実行する必要があります)。
エンジンの作成(こちらも GL スレッド):
認証情報: サブスクリプション認証とライセンス

TRTC(Tencent)

フック: TRTCCloud.setLocalVideoProcessListener。ピクセルフォーマットは Texture_2D、バッファタイプは TEXTURE です。 onGLContextCreated で Facebetter を作成し、onProcessVideoFrame で処理して dstFrame.texture.textureId を設定し、onGLContextDestoryrelease() します。
リスナーを外すかルームを退出したあとにエンジンを解放してください。最新の TRTC 詳細は Tencent のサードパーティ美顔ガイドを参照してください。 Flutter では Flutter · サードパーティ連携 を使います(FacebetterPlugin.processTexture。この Java API ではありません)。

Agora

フック: RtcEngine.registerVideoFrameObserver(Video SDK 4.x)。次が必要です。
  1. getVideoFrameProcessMode() から PROCESS_MODE_READ_WRITE を返す
  2. タイプ RGB(GL_TEXTURE_2DTextureBuffer を優先する
  3. onCaptureVideoFrame(または選択した観測位置)で Facebetter を実行し、処理済みテクスチャを VideoFrame書き戻す
新しい textureId を Agora の VideoFrame に注入する方法は、TextureBuffer ヘルパーに依存し、メジャーバージョン間で異なります。Facebetter が生成するのは新しい GL_TEXTURE_2D だけです。書き戻し手順は Agora の動画フレームオブザーバー / API Reference に従ってください。
RtcEngine を破棄する前にオブザーバーを登録解除し、beautyEngine.release() してください。

LiveKit

フック: ローカル動画トラック作成時に org.webrtc.VideoProcessor(または同等のトラックプロセッサ)を渡します。onFrameCaptured でテクスチャを処理し、sink.onFrame(...) で配信します。
カスタム VideoCapturer を実装し、キャプチャ後に processTexture を実行してから capturerObserver.onFrameCaptured を呼ぶこともできます。公式プロセッサ(バーチャル背景など)は LiveKit の livekit-android-track-processors モジュールにあります。

トラブルシューティング

関連