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
Compartilhado: processar CVPixelBuffer (esboço NV12)
Os callbacks da Agora / LiveKit costumam usar NV12. Pegue ponteiros de plano e strides doCVPixelBuffer; como escrever de volta no quadro do fornecedor varia conforme a versão do SDK.
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.
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:
- Retornar ReadWrite de
getVideoFrameProcessMode - Pegar o
CVPixelBufferemonCapture:sourceType:(ou oonCaptureVideoFramemais antigo) - Alimentá-lo via
createWithNV12:/createWithBGRA:e, em seguida, escrever o resultado de volta emAgoraOutputVideoFrame
setVideoFrameDelegate:nil e atribua nil a beautyEngine antes de destruir o mecanismo.
LiveKit
Hook: implemente o SwiftVideoProcessor, 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.
BackgroundBlurVideoProcessor. Capturers personalizados podem executar o Facebetter antes de os quadros entrarem no encoder.

