Skip to main content
SDK 2.0.0. Engancha Facebetter en el callback de preprocess de vídeo personalizado de un SDK de terceros: procesa fotogramas en el hilo OpenGL ES de ese SDK (o en el callback de pixel-buffer) y luego devuelve el resultado. 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

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

Crea el motor (hilo GL):

Compartido: procesar CVPixelBuffer (esquema NV12)

Los callbacks de Agora / LiveKit suelen usar NV12. Toma punteros de plano y stride del CVPixelBuffer; cómo escribes de vuelta en el fotograma del vendor varía según la versión del SDK.
Para el camino de pixel-buffer, crea el motor con 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.
Pon el motor a nil tras limpiar el delegate o salir de la sala. Consulta la guía de belleza de terceros de TRTC de Tencent para los detalles actuales. Para Flutter, usa Flutter · Integración con terceros (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:
  1. Devuelve ReadWrite desde getVideoFrameProcessMode
  2. Toma el CVPixelBuffer en onCapture:sourceType: (o el antiguo onCaptureVideoFrame)
  3. Aliméntalo con createWithNV12: / createWithBGRA: y luego escribe el resultado de vuelta en AgoraOutputVideoFrame
Cómo escribes un CVPixelBuffer procesado de vuelta en el fotograma de Agora varía entre versiones mayores. Facebetter mantiene la salida de processImage: en el mismo formato que la entrada; inyectarla en AgoraOutputVideoFrame debe seguir el procesamiento de vídeo en bruto de Agora.
Llama a setVideoFrameDelegate:nil y pon beautyEngine a nil antes de desmontar el motor.

LiveKit

Enganche: implementa el VideoProcessor 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.
Los procesadores de ejemplo oficiales (por ejemplo desenfoque de fondo) se entregan como BackgroundBlurVideoProcessor. Los capturadores personalizados pueden ejecutar Facebetter antes de que los fotogramas entren en el encoder.

Solución de problemas

Relacionado