Contrato compartido
En plataformas Apple, el preprocess personalizado de TRTC suele usar texturas OpenGL; Agora / LiveKit entregan más a menudo
CVPixelBuffer. Ambos funcionan: no mezcles ambos modos en una misma instancia del motor.
Compartido: procesar textura
Compartido: procesar CVPixelBuffer (esquema NV12)
Los callbacks de Agora / LiveKit suelen usar NV12. Toma punteros de plano y stride delCVPixelBuffer; cómo escribes de vuelta en el fotograma del vendor varía según la versión del SDK.
externalContext = NO. Credenciales: Suscripción, Autenticación y licencia.
TRTC (Tencent)
Enganche:setLocalVideoProcessDelegete:pixelFormat:bufferType: (ortografía oficial Delegete). Usa TRTCVideoPixelFormat_Texture_2D y TRTCVideoBufferType_Texture.
Implementa TRTCVideoFrameDelegate: crea el motor en onGLContextCreated; configura dstFrame.textureId en onProcessVideoFrame:dstFrame:; pon el motor a nil en onGLContextDestory.
FacebetterPlugin.processTexture).
Agora
Enganche:AgoraRtcEngineKit.setVideoFrameDelegate: (Video SDK 4.x). En iOS, los fotogramas capturados suelen ser CVPixelBuffer (textureBuf / formato 12), no un id GL_TEXTURE_2D al estilo de Android.
Debes:
- Devuelve ReadWrite desde
getVideoFrameProcessMode - Toma el
CVPixelBufferenonCapture:sourceType:(o el antiguoonCaptureVideoFrame) - Aliméntalo con
createWithNV12:/createWithBGRA:y luego escribe el resultado de vuelta enAgoraOutputVideoFrame
setVideoFrameDelegate:nil y pon beautyEngine a nil antes de desmontar el motor.
LiveKit
Enganche: implementa elVideoProcessor de Swift, transforma en process(frame:) y devuelve el fotograma nuevo (o nil para descartarlo). Pasa processor: al crear el track de cámara, o configura track.processor más tarde.
BackgroundBlurVideoProcessor. Los capturadores personalizados pueden ejecutar Facebetter antes de que los fotogramas entren en el encoder.

