Skip to main content
SDK 2.0.0. Encaixe o Facebetter no callback de pré-processamento de vídeo personalizado de um SDK de terceiros: no thread OpenGL ES desse SDK, execute processImage em uma textura externa e, em seguida, devolva a textura de saída. Regras completas de textura: Implementar beleza · Textura externa. Entrar na sala, publicar e permissões ficam na documentação do fornecedor — esta página cobre apenas o encaixe do Facebetter.

Contrato compartilhado

O Facebetter não aceita GL_TEXTURE_EXTERNAL_OES em createWithTexture. Se o fornecedor usar OES por padrão, mude para Texture2D / RGB conforme a documentação dele, ou faça blit para GL_TEXTURE_2D primeiro.

Helper compartilhado

Reutilize isto em cada callback GL do fornecedor (precisa rodar no thread GL):
Crie o mecanismo (também no thread GL):
Credenciais: Assinatura, Autenticação e licença.

TRTC (Tencent)

Hook: TRTCCloud.setLocalVideoProcessListener. Use o formato de pixel Texture_2D e o tipo de buffer TEXTURE. Crie o Facebetter em onGLContextCreated, processe em onProcessVideoFrame e defina dstFrame.texture.textureId, chame release() em onGLContextDestory.
Libere o mecanismo depois de remover o listener ou sair da sala. Consulte o guia de beleza de terceiros da Tencent para os detalhes mais recentes do TRTC. No Flutter, use Flutter · Integração com terceiros (FacebetterPlugin.processTexture, não esta API Java).

Agora

Hook: RtcEngine.registerVideoFrameObserver (Video SDK 4.x). Você precisa:
  1. Retornar PROCESS_MODE_READ_WRITE de getVideoFrameProcessMode()
  2. Preferir um TextureBuffer com tipo RGB (GL_TEXTURE_2D)
  3. Executar o Facebetter em onCaptureVideoFrame (ou na posição de observação escolhida) e, em seguida, escrever a textura processada de volta no VideoFrame
Como injetar um novo textureId de volta no VideoFrame da Agora depende dos helpers de TextureBuffer e muda entre versões principais. O Facebetter só produz um novo GL_TEXTURE_2D; o passo de write-back precisa seguir o observador de quadro de vídeo da Agora / Referência da API.
Cancele o registro do observer e chame beautyEngine.release() antes de destruir o RtcEngine.

LiveKit

Hook: passe um org.webrtc.VideoProcessor (ou processador de track equivalente) ao criar a track de vídeo local. Processe texturas em onFrameCaptured e, em seguida, entregue via sink.onFrame(...).
Você também pode implementar um VideoCapturer personalizado, executar processTexture após a captura e, em seguida, chamar capturerObserver.onFrameCaptured. Processadores oficiais (por exemplo fundo virtual) ficam no módulo livekit-android-track-processors do LiveKit.

Solução de problemas

Relacionado