Skip to main content
SDK 2.0.0. 서드파티 SDK의 커스텀 비디오 전처리 콜백에 Facebetter를 겁니다. 해당 SDK의 OpenGL ES 스레드(또는 픽셀 버퍼 콜백)에서 프레임을 처리한 뒤 결과를 반환합니다. 전체 텍스처 규칙: 뷰티 효과 적용 · 외부 텍스처. 방 입장, 게시, 권한은 벤더 문서에 따릅니다. 이 페이지는 Facebetter 연결만 다룹니다.

공통 계약

Apple 플랫폼에서 TRTC 커스텀 전처리는 보통 OpenGL 텍스처를 사용합니다. Agora / LiveKit는 **CVPixelBuffer**를 더 자주 제공합니다. 둘 다 동작합니다. 한 엔진 인스턴스에서 두 모드를 섞지 마세요.

공유: 텍스처 처리

엔진 생성(GL 스레드):

공유: CVPixelBuffer 처리 (NV12 스케치)

Agora / LiveKit 콜백은 종종 NV12를 사용합니다. CVPixelBuffer에서 평면 포인터와 stride를 가져옵니다. 벤더 프레임에 다시 쓰는 방식은 SDK 버전에 따라 다릅니다.
픽셀 버퍼 경로에서는 externalContext = NO로 엔진을 만듭니다. 자격 증명: 구독, 인증 및 라이선스.

TRTC (Tencent)

훅: setLocalVideoProcessDelegete:pixelFormat:bufferType:(공식 철자 Delegete). **TRTCVideoPixelFormat_Texture_2D**와 **TRTCVideoBufferType_Texture**를 사용하세요. TRTCVideoFrameDelegate를 구현합니다. onGLContextCreated에서 엔진을 만들고, onProcessVideoFrame:dstFrame:에서 dstFrame.textureId를 설정하고, onGLContextDestory에서 엔진을 nil로 둡니다.
델리게이트를 지우거나 방을 나간 뒤 엔진을 nil로 둡니다. 최신 세부 사항은 Tencent TRTC 서드파티 뷰티 가이드를 참고하세요. Flutter는 Flutter · 서드파티 연동(FacebetterPlugin.processTexture)을 사용하세요.

Agora

훅: AgoraRtcEngineKit.setVideoFrameDelegate:(Video SDK 4.x). iOS에서 캡처 프레임은 보통 CVPixelBuffer(textureBuf / 형식 12)이며 Android 스타일 GL_TEXTURE_2D id가 아닙니다. 다음이 필요합니다.
  1. getVideoFrameProcessMode에서 ReadWrite를 반환
  2. onCapture:sourceType:(또는 구 onCaptureVideoFrame)에서 CVPixelBuffer를 가져옴
  3. createWithNV12: / createWithBGRA:로 넣고, 결과를 AgoraOutputVideoFrame다시 씀
처리된 CVPixelBuffer를 Agora 프레임에 다시 쓰는 방식은 메이저 버전마다 다릅니다. Facebetter는 processImage: 출력을 입력과 같은 형식으로 유지합니다. AgoraOutputVideoFrame에 주입하는 방법은 Agora raw video processing을 따르세요.
엔진을 해제하기 전에 setVideoFrameDelegate:nil을 호출하고 beautyEngine을 nil로 둡니다.

LiveKit

훅: Swift VideoProcessor를 구현하고 process(frame:)에서 변환한 뒤 새 프레임을 반환합니다(nil이면 드롭). 카메라 트랙을 만들 때 processor:를 전달하거나 나중에 track.processor를 설정합니다.
공식 샘플 프로세서(예: 배경 블러)는 BackgroundBlurVideoProcessor로 제공됩니다. 커스텀 capturer는 프레임이 인코더에 들어가기 전에 Facebetter를 실행할 수 있습니다.

문제 해결

관련 문서