연동
엔진 생성이 예외를 던지거나 준비되지 않음
IllegalArgumentException:EngineConfig에는 비어 있지 않은licenseToken, 또는appId와appKey가 모두 필요합니다- 대시보드에서 이 앱의 애플리케이션 패키지 이름을 바인딩하세요
- 온라인 인증이면
/facebetter/v2/auth에 대한 네트워크 접근을 확인하세요 EngineEventCode.LICENSE_VALIDATION_FAILED/INITIALIZATION_FAILED를 수신하세요new BeautyEffectEngine(...)전에setLogConfig를 호출하세요
컴파일: net.pixpark.facebetter를 해석할 수 없음
- Maven:
implementation 'net.pixpark:facebetter:2.0.0' - 로컬 AAR:
implementation files('libs/facebetter.aar')후 Sync - Clean / Rebuild
UnsatisfiedLinkError
- 기기 ABI는
arm64-v8a또는armeabi-v7a여야 합니다 - shrink/obfuscate를 쓰면
libfacebetter.so를 유지하고, ProGuard / R8에서 Facebetter native 메서드를 유지하세요 - AAR / Maven 아티팩트가 완전한지 확인하세요
효과
뷰티가 약해 보임
[0, 1]범위에서 강도를 높이세요(setSmoothing,setWhitening, 메이크업, …)- 리셰이프는 **
[-1, 1]**입니다.0에 가까우면 거의 꺼진 상태입니다 INITIALIZATION_COMPLETE와processImage가 null이 아닌 프레임을 반환하는지 확인하세요onFaceLandmarks로 랜드마크를 확인하세요(빈 목록 = 얼굴 없음)
얼굴이 왜곡됨
setReshape절댓값을 낮추세요. 부호를 바꾸면 방향이 반대가 됩니다- 여러 리셰이프 노브를 높은 절댓값으로 쌓지 마세요
- 라이브
VIDEO가 더 부드럽고 강하지 않다면, 정지 내보내기에는FrameType.IMAGE를 사용하세요
가상 배경이 동작하지 않음
setVirtualBackgroundBlur(level)을level > 0으로 호출하거나, 또는setVirtualBackground(path|bytes)를 호출하세요setVirtualBackgroundBlur(0)은 효과를 지웁니다- 이미지 경로는 읽을 수 있는 PNG/JPG여야 합니다. 빈 경로는
ErrorCode.INVALID_ARGUMENT를 반환합니다 - 그린스크린:
setChromaKey(ChromaKeyColor.GREEN)과 채우기(블러 또는 이미지) clearChromaKey()는 인물 마스크만 복원하며, 채우기는 제거하지 않습니다
필터 또는 스티커가 나타나지 않음
setFilter/setSticker에.fbd경로 또는 바이트를 전달하세요(등록 API 없음)- 업로드는 GL 스레드의 다음
processImage에서 이루어집니다 externalContext = true이면 해당 호출은 현재 GL 컨텍스트가 있는 상태에서 실행되어야 합니다setFilterIntensity(0)이면 LUT가 보이지 않습니다
성능과 메모리
미리보기가 느림
input.type = ImageFrame.FrameType.VIDEO- 캡처 해상도를 낮추세요
- 동시에 켜는 리셰이프 / 메이크업 / VB 효과를 줄이세요
processImage는 메인 스레드가 아닌 카메라 또는 GL 스레드에서engine.getStats().avgProcessTimeMs를 확인하세요- 갤러리 대형: 사진을 열 때 작은 미리보기 프레임을 만들고, 내보낼 때 원본을 한 번 처리하세요. 권장 사항을 보세요
메모리가 늘어나거나 네이티브 크래시
convert()결과와processImage출력을 포함해 모든ImageFrame에release()를 호출하세요ByteBuffer.allocateDirect를 사용하세요- 엔진은 하나이며,
onDestroy에서engine.release()를 호출하세요
ANR
- HD 비디오에 대해 UI 스레드에서
processImage를 실행하지 마세요 - 메인 스레드에서 큰
.fbd/ JPEG 파일을 로드하지 마세요
이미지와 카메라
픽셀 형식을 어떻게 바꾸나요?
ImageFrame.convert(Format)을 사용합니다(새 프레임 반환):
getData(). 플래너 YUV: getDataY() / getDataU() / getDataV() 또는 getDataUV().
Camera2 미리보기
YUV_420_888에서ImageImageFrame.createWithAndroid420(...)- 센서 + 전면 카메라에 맞게
rotate/mirror input.type = FrameType.VIDEOprocessImage(input)- 표시를 위해 convert 또는
getTexture()
회전
rotate(ImageFrame.Rotation.ROTATION_90)(0 / 90 / 180 / 270, 시계 방향)은 프레임을 변경합니다.
권한
온라인 인증:CAMERA(API 23+에서 런타임 요청). 앱 저장소 밖의 파일 로그는 구버전 API에서 저장소 권한이 필요할 수 있습니다.
디버깅
엔진을 만들기 전에 로그를 켭니다.0을 반환합니다. -1 = 잘못된 인자, -2 = 미초기화. 전체 목록: 오류 처리.
호환성
- Android 7.0 (API 24)+
- ABI:
arm64-v8a,armeabi-v7a - Maven:
net.pixpark:facebetter:2.0.0

