FacebetterPlugin.processTexture を呼び、出力テクスチャを相手フレームへ書き戻します。
共通の契約
このライブエンジンでは
processFile / processImageBytes / processImageFile / processImageToUiImage を呼び出さないでください。
しないでください: Dart から毎フレームピクセルや texture id を渡す。非 GL スレッドで
processTexture を呼ぶ。先のライブエンジンを dispose する前に 2 台目の externalContext: true を create する。
TRTC(Tencent)
前提: プロジェクトにtencent_trtc_cloud(またはネイティブ TRTC)と facebetter_flutter: ^2.0.0 が入っている。カスタム前処理を開くときは Texture2D + Texture buffer を指定し、YUV / PixelBuffer を使わない。
Dart 側でエンジン作成後にカスタム前処理を開きます(メソッド名はプラグインバージョンで多少異なります)。
iOS — onProcessVideoFrame
tencent_trtc_cloud の ITXCustomBeautyProcesser を使う場合も、ピクセルフォーマットは Texture2D / Texture を選び、コールバックで同じ processTexture を呼びます。ファクトリ登録は GeneratedPluginRegistrant.register(with:) のあとである必要があります。
Android — Kotlin
破棄
Agora
接続方針はネイティブと同じです。iOS / Android ネイティブの動画フレーム観測 / カスタム前処理コールバックでFacebetterPlugin.processTexture を呼び、Dart は FBEngine パラメータだけを担当します。
- Dart:
FBEngine.create(externalContext: true)して美顔を設定 - Agora Flutter プラグインドキュメントに従い、カスタム動画処理を開くかネイティブ observer を登録(API は
agora_rtc_engineバージョンで変化) - ネイティブコールバックで
GL_TEXTURE_2DtextureId を取得したらprocessTextureを呼び、相手フレームへ書き戻す
processTexture を優先します)。
破棄: 先に Agora 前処理を登録解除し、そのあと engine.dispose()。
LiveKit
同様に Dart でパラメータを設定し、ネイティブでテクスチャを処理します。- Dart で
externalContext: trueのエンジンを作成 - LiveKit Flutter / ネイティブのカスタム capturer または video processor でテクスチャフレームを取得
- GL スレッドで
FacebetterPlugin.processTextureを呼び、出力を LiveKit トラックへ戻す
livekit_client とプラットフォーム実装で変わります。テクスチャ契約: Android · LiveKit、iOS · LiveKit。

