Skip to main content

SDK 추가

방법 A: Maven (권장)

프로젝트 build.gradle / settings.gradle repositories:
모듈 build.gradle:
Version Catalog (gradle/libs.versions.toml):

방법 B: 로컬 AAR

다운로드에서 SDK를 받아 facebetter.aarlibs/에 복사한 뒤:

권한

AndroidManifest.xml:
API 23+에서는 런타임에 CAMERA를 요청하세요.

가져오기

로깅

로깅은 기본적으로 꺼져 있습니다. new BeautyEffectEngine(...) 전에 켜세요.
엔진을 생성하기 전에 setLogConfig를 호출하세요. 그렇지 않으면 초기화 로그를 놓칩니다.

엔진 생성

자격 증명: 구독. 인증 세부 사항: 인증 및 라이선스. licenseToken이 비어 있지 않으면 사용됩니다(라이선스 토큰 / {token} JSON / 오프라인 .lic). 그렇지 않으면 appId + appKey/facebetter/v2/auth를 호출합니다.
생성자는 null을 반환하지 않습니다. config가 유효하지 않으면 예외를 던집니다. 비동기 초기화는 콜백에서 EngineEventCode.INITIALIZATION_COMPLETE / INITIALIZATION_FAILED를 확인하세요.

뷰티

강도 [0.0, 1.0]. 0은 효과를 끕니다. ErrorCode.SUCCESS(0)를 확인하세요.
setBeautySkinOnly(true)이면 스무딩 / 화이트닝 / 샤프닝 / 로지니스가 감지된 피부에만 적용됩니다. 옷과 배경은 그대로입니다.
스타일: 파라미터 열거형.

리셰이프

범위 [-1.0, 1.0]. 0은 꺼짐입니다.
26개 파라미터 전체(FACE_THINBROW_THICKNESS)와 양/음 방향: 파라미터 열거형.

바디 리셰이프

범위 [0.0, 1.0]. 0은 꺼짐. 먼저 addResourcePack으로 resource_body.fbd를 등록하세요(AAR에 없음). 파라미터 열거형선택 리소스 팩을 참고하세요.

메이크업

강도를 설정한 뒤 스타일 및/또는 색상을 설정합니다.
전체 프리셋 목록: 파라미터 열거형.

가상 배경과 크로마키

블러(0은 지움), 정지 이미지, 또는 크로마키 마스크 + 채우기.
clearChromaKey()는 인물 세그멘테이션을 복원하며 현재 블러/이미지 채우기는 제거하지 않습니다.

필터와 스티커

파일 경로 또는 assets에서 .fbd를 로드합니다. 등록 단계는 없습니다.
3D 스티커는 선택 resource_3d.fbd 팩이 필요합니다(AAR에 없음). 선택 리소스 팩을 참고하세요. 앱 assets에서 등록한 뒤 3D 스티커 .fbd를 적용합니다.
필터 / 스티커 변경은 다음 processImage에서 적용됩니다.

콜백과 통계

프레임 처리

생성한 모든 프레임(및 processImage 출력)에서 ImageFrame.release()를 호출하세요. 건너뛰면 네이티브 메모리가 누수됩니다.
ImageFrame.typeFrameType.IMAGE(정지) 또는 FrameType.VIDEO(카메라 / 라이브)로 설정합니다. processImage는 프레임만 받으며 추가 모드 인자는 없습니다.
파일 또는 Bitmap에서:
카메라 센서가 회전되어 있으면 처리 전에 회전 / 미러합니다.
엔진은 입력과 출력 픽셀 형식을 맞춥니다(NV21 in → NV21 out, RGBA in → RGBA out).
픽셀은 getData() / 평면 접근자로 읽거나 변환합니다.

카메라 파이프라인

일반적인 Camera2 YUV_420_888 → 엔진 → 표시:

외부 텍스처 (OpenGL ES)

GL 스레드에서 externalContext = true로 엔진을 만드세요. 입력과 출력 텍스처는 해당 컨텍스트를 공유해야 합니다.
이미 OpenGL ES로 렌더링하고 CPU round-trip을 피하고 싶을 때 사용합니다.
입력 GL_TEXTURE_2D의 권장 샘플러 상태:
참고:
  • 입력 텍스처: GL_TEXTURE_2D, 보통 RGBA; stride는 보통 width * 4
  • 첫 GL 콜백에서 엔진을 지연 생성하여 컨텍스트가 current인지 확인
  • 출력 텍스처는 SDK가 소유합니다. glDeleteTextures를 호출하지 마세요. ImageFrame은 release
  • GL 컨텍스트가 손실되면 엔진을 release()하고 새 컨텍스트에서 다시 생성
  • 라이브 GL 파이프라인에는 FrameType.VIDEO를 사용
  • TRTC / Agora / LiveKit 및 유사 SDK: 서드파티 연동

라이프사이클

onDestroy / onDetach에서 engine.release()를 호출하세요. 해제하지 않으면 GPU와 네이티브 메모리가 누수됩니다.

관련 문서