Skip to main content
SDK 2.0.0. Engancha Facebetter en el callback de preprocess de vídeo personalizado de un SDK de terceros: en el hilo OpenGL ES de ese SDK, ejecuta processImage sobre una textura externa y luego devuelve la textura de salida. Reglas completas de textura: Implementar belleza · Textura externa. Unirse a la sala, publicar y los permisos pertenecen a la documentación del vendor: esta página solo cubre el enganche de Facebetter.

Contrato compartido

Facebetter no acepta GL_TEXTURE_EXTERNAL_OES para createWithTexture. Si el vendor usa OES por defecto, cambia a Texture2D / RGB según su documentación, o haz blit a GL_TEXTURE_2D primero.

Función auxiliar compartida

Reutiliza esto en cada callback GL del vendor (debe ejecutarse en el hilo GL):
Crea el motor (también en el hilo GL):
Credenciales: Suscripción, Autenticación y licencia.

TRTC (Tencent)

Enganche: TRTCCloud.setLocalVideoProcessListener. Usa formato de píxel Texture_2D y tipo de buffer TEXTURE. Crea Facebetter en onGLContextCreated, procesa en onProcessVideoFrame y configura dstFrame.texture.textureId; release() en onGLContextDestory.
Libera el motor tras quitar el listener o salir de la sala. Consulta la guía de belleza de terceros de Tencent para los detalles actuales de TRTC. Para Flutter, usa Flutter · Integración con terceros (FacebetterPlugin.processTexture, no esta API Java).

Agora

Enganche: RtcEngine.registerVideoFrameObserver (Video SDK 4.x). Debes:
  1. Devuelve PROCESS_MODE_READ_WRITE desde getVideoFrameProcessMode()
  2. Prefiere un TextureBuffer de tipo RGB (GL_TEXTURE_2D)
  3. Ejecuta Facebetter en onCaptureVideoFrame (o la posición de observación que elijas) y luego escribe la textura procesada de vuelta en el VideoFrame
Cómo inyectas un textureId nuevo de vuelta en el VideoFrame de Agora depende de sus helpers de TextureBuffer y varía entre versiones mayores. Facebetter solo produce un GL_TEXTURE_2D nuevo; el paso de escritura debe seguir el observador de fotogramas de Agora / la referencia de la API.
Anula el registro del observer y beautyEngine.release() antes de destruir RtcEngine.

LiveKit

Enganche: pasa un org.webrtc.VideoProcessor (o un procesador de track equivalente) al crear el track de vídeo local. Procesa las texturas en onFrameCaptured y entrega el resultado con sink.onFrame(...).
También puedes implementar un VideoCapturer personalizado, ejecutar processTexture tras la captura y luego llamar a capturerObserver.onFrameCaptured. Los procesadores oficiales (por ejemplo fondo virtual) están en el módulo livekit-android-track-processors de LiveKit.

Solución de problemas

Relacionado