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: processe os quadros no thread OpenGL ES desse SDK (ou no callback de pixel-buffer) e, em seguida, devolva o resultado. 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

Nas plataformas Apple, o pré-processamento personalizado do TRTC costuma usar texturas OpenGL; Agora / LiveKit mais frequentemente entregam CVPixelBuffer. Os dois funcionam — não misture os dois modos na mesma instância do mecanismo.

Compartilhado: processar textura

Crie o mecanismo (thread GL):

Compartilhado: processar CVPixelBuffer (esboço NV12)

Os callbacks da Agora / LiveKit costumam usar NV12. Pegue ponteiros de plano e strides do CVPixelBuffer; como escrever de volta no quadro do fornecedor varia conforme a versão do SDK.
No caminho de pixel-buffer, crie o mecanismo com externalContext = NO. Credenciais: Assinatura, Autenticação e licença.

TRTC (Tencent)

Hook: setLocalVideoProcessDelegete:pixelFormat:bufferType: (grafia oficial Delegete). Use TRTCVideoPixelFormat_Texture_2D e TRTCVideoBufferType_Texture. Implemente TRTCVideoFrameDelegate: crie o mecanismo em onGLContextCreated; defina dstFrame.textureId em onProcessVideoFrame:dstFrame:; atribua nil ao mecanismo em onGLContextDestory.
Atribua nil ao mecanismo depois de limpar o delegate ou sair da sala. Consulte o guia de beleza de terceiros TRTC da Tencent para os detalhes mais recentes. No Flutter, use Flutter · Integração com terceiros (FacebetterPlugin.processTexture).

Agora

Hook: AgoraRtcEngineKit.setVideoFrameDelegate: (Video SDK 4.x). No iOS, os quadros capturados costumam ser CVPixelBuffer (textureBuf / formato 12), não um id GL_TEXTURE_2D no estilo Android. Você precisa:
  1. Retornar ReadWrite de getVideoFrameProcessMode
  2. Pegar o CVPixelBuffer em onCapture:sourceType: (ou o onCaptureVideoFrame mais antigo)
  3. Alimentá-lo via createWithNV12: / createWithBGRA: e, em seguida, escrever o resultado de volta em AgoraOutputVideoFrame
Como escrever um CVPixelBuffer processado de volta no quadro da Agora muda entre versões principais. O Facebetter mantém a saída de processImage: no mesmo formato da entrada; injetar isso em AgoraOutputVideoFrame precisa seguir o processamento de vídeo bruto da Agora.
Chame setVideoFrameDelegate:nil e atribua nil a beautyEngine antes de destruir o mecanismo.

LiveKit

Hook: implemente o Swift VideoProcessor, transforme em process(frame:) e devolva o novo quadro (ou nil para descartar). Passe processor: ao criar a track da câmera, ou defina track.processor depois.
Os processadores de exemplo oficiais (por exemplo desfoque de fundo) vêm como BackgroundBlurVideoProcessor. Capturers personalizados podem executar o Facebetter antes de os quadros entrarem no encoder.

Solução de problemas

Relacionado