Skip to main content
이 페이지는 SDK 2.0.0에 해당합니다. 인증: 인증 및 라이선스. 열거형: 파라미터 열거형.

연동

엔진 생성이 nil을 반환함

  • licenseToken 또는 appId + appKey가 설정되어 있는지 확인하세요. 둘 다 있으면 토큰이 우선합니다.
  • 대시보드에서 앱 Bundle ID를 바인딩하세요.
  • 온라인 인증은 /facebetter/v2/auth에 대한 네트워크가 필요합니다.
  • createEngineWithConfig: 전에 로그를 켜고 이벤트 1(라이선스 실패)과 101(초기화 실패)을 확인하세요.
  • CocoaPods: pod 'Facebetter', '2.0.0'. .xcodeproj가 아니라 .xcworkspace를 여세요.

헤더 또는 클래스가 없음

  • #import <Facebetter/FBBeautyEffectEngine.h>를 임포트하세요.
  • 수동 .framework이면 Embed & Sign을 설정하세요.
  • Clean Build Folder 후 재빌드하세요.
  • Xcode 15+에서 CocoaPods 스크립트가 실패하면 ENABLE_USER_SCRIPT_SANDBOXINGNo로 설정하세요.

런타임 링크 / dyld 오류

  • 아키텍처는 arm64여야 합니다.
  • 배포 타깃 iOS 12.0+.
  • Facebetter.framework가 Embed Frameworks에 있는지 확인하세요.

인증

licenseToken vs appId / appKey

licenseToken이 비어 있지 않으면 SDK는 해당 토큰 / {token} JSON / .lic를 로컬에서 검증하며 appId / appKey를 보내지 않습니다. 그렇지 않으면 온라인 인증을 사용합니다. 자세한 내용: 인증 및 라이선스.

이벤트 1 또는 101

라이선스 또는 초기화가 실패했습니다. Bundle ID, 요금제, 토큰 만료, 로그를 확인하세요. 생성이 nil이 아닌 객체를 반환하는 것만으로는 부족합니다. onEngineEvent를 수신하세요.

뷰티

효과가 너무 약하거나 너무 강함

  • 피부 / 메이크업 / 필터: [0.0, 1.0].
  • 리셰이프: setReshape:intensity:[-1.0, 1.0] (0은 꺼짐).
  • 강도 0은 해당 효과를 끕니다.
  • 피부만: setBeautySkinOnly:.

메이크업 / 리셰이프 열거형 값

앱 코드 주석에 표를 복사하지 마세요. 파라미터 열거형을 사용하세요. Objective-C 이름은 FBReshape_FaceThin, FBLipstickColor_Rouge 형태입니다.

필터, 스티커, 가상 배경

필터 또는 스티커가 동작하지 않음

.fbd 경로 또는 바이트를 전달하세요.
텍스처는 다음 processImage:(GL 스레드)에서 생성됩니다. 빈 경로 / nil 데이터는 FBErrorCode_InvalidArgument를 반환합니다. 파일이 없으면 FBErrorCode_IO를 반환합니다.

가상 배경

크로마키는 마스크입니다. 채우기는 여전히 블러 또는 이미지입니다.

처리

processImage:nil을 반환함

  • 엔진이 nil이거나 초기화가 실패했습니다(-2 / 이벤트 101).
  • 잘못된 프레임(크기 0, 미지원 형식).
  • externalContext = YES이지만 현재 스레드에 GL 컨텍스트가 없습니다.
  • 처리 실패(FBErrorCode_Process)로 다루세요.

프레임 유형

imageFrame.typeFBFrameTypeImage(0) 또는 FBFrameTypeVideo(1)로 설정하세요. 처리 모드 인자를 전달하지 마세요.

형식 변환

convert:와 프레임 접근자를 사용하세요.
YUV: dataY / dataU / dataV / dataUV와 대응하는 stride*.

UIImage

카메라 미리보기

  1. AVCaptureVideoDataOutput에서 CVPixelBuffer를 읽습니다.
  2. createWithNV12:... 또는 createWithBGRA:...FBImageFrame을 만듭니다.
  3. type = FBFrameTypeVideo를 설정하고, 선택적으로 setMirror:@"horizontal"을 호출합니다.
  4. processImage:[output data] 또는 [output texture]를 표시합니다.

성능과 메모리

  • 라이브에는 FBFrameTypeVideo를 사용하세요. getStats.avgProcessTimeMs가 높으면 해상도를 낮추세요.
  • 엔진은 하나, 직렬 큐를 사용하고 메인 스레드에서 처리하지 마세요.
  • ARC로 프레임을 해제하세요(frame = nil). 캡처 버퍼를 재사용하세요.
  • 매 프레임마다 setFilter: / setSticker:를 호출하지 마세요.

로깅

반환 코드: 0 성공, -1 잘못된 인자, -2 미초기화. 전체 목록: 오류 처리.

버전

  • iOS 12.0+, arm64.
  • CocoaPods: pod 'Facebetter', '2.0.0'.
  • 업그레이드 후: pod install, Clean Build Folder, 인증과 processImage:를 다시 테스트하세요.

스레딩

  • 기본 엔진: 모든 processImage:와 GL 리소스를 건드리는 setter는 직렬 큐입니다.
  • externalContext = YES: GL 스레드에서 생성 + 처리합니다.
  • UI는 메인 큐에서만 업데이트하세요.