Integración
La construcción del motor lanza una excepción o nunca queda lista
IllegalArgumentException:EngineConfignecesita unlicenseTokenno vacío, o ambosappIdyappKey- Vincula el nombre de paquete de la aplicación en la Consola a esta app
- Para autenticación en línea, confirma acceso de red a
/facebetter/v2/auth - Escucha
EngineEventCode.LICENSE_VALIDATION_FAILED/INITIALIZATION_FAILED - Llama a
setLogConfigantes denew BeautyEffectEngine(...)
Compilación: no se resuelve net.pixpark.facebetter
- Maven:
implementation 'net.pixpark:facebetter:2.0.0' - AAR local:
implementation files('libs/facebetter.aar')y Sync - Clean / Rebuild
UnsatisfiedLinkError
- El ABI del dispositivo debe ser
arm64-v8aoarmeabi-v7a - Conserva
libfacebetter.sosi reduces/ofuscas; conserva los métodos nativos de Facebetter en ProGuard / R8 - Confirma que el artefacto AAR / Maven está completo
Efectos
La belleza se ve débil
- Sube las intensidades en
[0, 1](setSmoothing,setWhitening, maquillaje, …) - El remodelado usa
[-1, 1]— un valor cercano a0está casi desactivado - Confirma
INITIALIZATION_COMPLETEy queprocessImagedevuelve un fotograma no nulo - Revisa los landmarks con
onFaceLandmarks(lista vacía = no hay rostro)
El rostro se ve deformado
- Baja las magnitudes de
setReshape; el signo opuesto invierte la dirección - Evita apilar muchos mandos de remodelado a valores absolutos altos
- Usa
FrameType.IMAGEpara exportar estáticos si elVIDEOen directo se ve más suave, no más fuerte
El fondo virtual no hace nada
- Llama a
setVirtualBackgroundBlur(level)conlevel > 0, osetVirtualBackground(path|bytes) setVirtualBackgroundBlur(0)borra el efecto- La ruta de imagen debe ser un PNG/JPG legible; una ruta vacía devuelve
ErrorCode.INVALID_ARGUMENT - Pantalla verde:
setChromaKey(ChromaKeyColor.GREEN)más un relleno (desenfoque o imagen) clearChromaKey()solo restaura la máscara de retrato; no quita el relleno
El filtro o el sticker no aparecen
- Pasa una ruta o bytes
.fbdasetFilter/setSticker(no hay API de registro) - La subida ocurre en el siguiente
processImageen el hilo GL - Con
externalContext = true, esa llamada debe ejecutarse con un contexto GL actual setFilterIntensity(0)hace invisible un LUT
Rendimiento y memoria
La vista previa es lenta
input.type = ImageFrame.FrameType.VIDEO- Baja la resolución de captura
- Menos efectos simultáneos de remodelado / maquillaje / fondo virtual
processImagefuera del hilo principal (hilo de cámara o GL)- Observa
engine.getStats().avgProcessTimeMs - Fotos grandes de galería: crea un fotograma de vista previa más pequeño al abrir; exporta el original una vez. Véase Prácticas recomendadas
La memoria sube o hay crash nativo
release()de cadaImageFrame, incluidos los resultados deconvert()y la salida deprocessImage- Usa
ByteBuffer.allocateDirect - Una instancia de motor; llama a
engine.release()enonDestroy
ANR
- No ejecutes
processImageen el hilo de UI para vídeo HD - No cargues archivos
.fbd/ JPEG grandes en el hilo principal
Imagen y cámara
¿Cómo cambio el formato de píxel?
UsaImageFrame.convert(Format) (devuelve un fotograma nuevo):
getData(). YUV planar: getDataY() / getDataU() / getDataV() o getDataUV().
Vista previa Camera2
ImagedeYUV_420_888ImageFrame.createWithAndroid420(...)rotate/mirrorpara el sensor + cámara frontalinput.type = FrameType.VIDEOprocessImage(input)- Convierte o usa
getTexture()para mostrar
Rotación
rotate(ImageFrame.Rotation.ROTATION_90) (0 / 90 / 180 / 270, sentido horario) muta el fotograma.
Permisos
Autenticación en línea:CAMERA (solicitud en runtime en API 23+). Los logs de archivo fuera del almacenamiento de la app pueden necesitar permisos de almacenamiento en APIs antiguas.
Depuración
Activa los logs antes de crear el motor:0 si tienen éxito. -1 = argumento no válido, -2 = no inicializado. Lista completa: Manejo de errores.
Compatibilidad
- Android 7.0 (API 24)+
- ABIs:
arm64-v8a,armeabi-v7a - Maven:
net.pixpark:facebetter:2.0.0

