Grabar archivos EIF en Unity
Este artículo explica cómo grabar archivos EIF en Unity para poder usarlos en la simulación.
Antes de empezar
- Entender los conceptos básicos de grabar un archivo EIF y usarlo para simulación
- Entender los conceptos básicos, la composición y el flujo de trabajo de AR Session
- Aprender cómo acceder al componente de grabación mediante acceder a los componentes AR de la session
Iniciar la grabación
Usa FrameRecorder.enabled = true para iniciar la grabación, por ejemplo:
if (Session.State >= ARSession.SessionState.Ready && Session.Assembly.FrameRecorder.OnSome)
{
var frameRecorder = Session.Assembly.FrameRecorder.Value;
frameRecorder.enabled = true;
}
Ten en cuenta que primero debes comprobar si existe ARAssembly.FrameRecorder.
Nota
ARAssembly.FrameRecorder no puede usarse en algunos casos, por ejemplo cuando se usa FramePlayer.
El valor predeterminado de FrameRecorder.enabled es false, lo que significa que la grabación está desactivada; incluso si se configura manualmente en el editor, no tendrá efecto.
La grabación solo comenzará cuando, durante la ejecución de la session, FrameRecorder.Status >= FrameRecorder.RecorderStatus.Ready.
Si FrameRecorder.Status < FrameRecorder.RecorderStatus.Ready, puedes usar el evento OnReady para esperar a que la grabación esté lista.
Session.GetComponent<FrameRecorder>().OnReady.AddListener(() => {
// Se puede empezar a grabar
});
Puedes usar el evento OnRecording para confirmar que el inicio fue correcto:
frameRecorder.OnRecording.AddListener((file) =>
{
Debug.Log($"Recording started: {file}");
});
Si el inicio falla, no se activa ningún evento, pero puedes comprobar si FrameRecorder.Status es Error para confirmarlo.
Importante
El resultado de ejecución al reproducir EIF en la escena depende del dispositivo usado para grabar y de la frame source elegida en ese momento. Por eso, al grabar EIF, se recomienda usar un dispositivo igual o parecido al dispositivo objetivo, para garantizar que el efecto de reproducción sea consistente con el del dispositivo objetivo. También hay que prestar especial atención a si la función de seguimiento de movimiento estaba activada en la escena grabada. Si no estaba activada durante la grabación, tampoco podrá activarse durante la reproducción, y las funciones AR que dependen del seguimiento de movimiento (por ejemplo, el mapa espacial denso, Mega, etc.) tampoco funcionarán igual que en el dispositivo.
Detener la grabación
Usa FrameRecorder.enabled = false para detener la grabación, por ejemplo:
frameRecorder.enabled = false;
Esta operación detiene la grabación de inmediato y bloquea hasta que termine de escribirse el archivo.
Importante
Debes llamar a detener la grabación; de lo contrario, el archivo grabado quedará incompleto y algunas funciones o incluso todo el archivo no podrán usarse:
Almacenamiento y exportación de archivos
Puedes usar el evento OnRecording para obtener la ruta real completa del archivo grabado:
frameRecorder.OnRecording.AddListener((file) =>
{
Debug.Log($"Recording started: {file}");
});
Con la configuración predeterminada, el archivo grabado se almacena en la ruta de datos persistentes de la aplicación, a la que puedes acceder mediante Application.persistentDataPath.
Puedes cambiar la ruta de almacenamiento con FrameRecorder.Configuration.FilePath. Esta ruta debe establecerse antes de iniciar la grabación, y solo tendrá efecto después de desactivar AutoFilePath. Debes crear el directorio con antelación.
Importante
Debe existir el directorio de almacenamiento del archivo grabado y la aplicación debe poder escribir en él; de lo contrario, el inicio de la grabación fallará.
Por ejemplo, el siguiente código muestra cómo guardar el archivo en un directorio personalizado y generar el nombre del archivo según el tipo de FrameSource usado por la session y la hora actual:
if (!Directory.Exists(SavePath))
{
Directory.CreateDirectory(SavePath);
}
var frameRecorder = Session.Assembly.FrameRecorder.Value;
frameRecorder.Configuration.AutoFilePath = false;
frameRecorder.Configuration.FilePath.Type = WritablePathType.Absolute;
frameRecorder.Configuration.FilePath.FolderPath = SavePath;
frameRecorder.Configuration.FilePath.FileName = ARSessionFactory.DefaultName(Session.Assembly.FrameSource.GetType()).Replace(" ", "") + DateTime.Now.ToString("_yyyy-MM-dd_HH-mm-ss.fff");
frameRecorder.enabled = true;
También puedes configurarlo en el editor: selecciona AR Session (EasyAR) y, en la ventana Inspector, desmarca Auto File Path en Frame Recorder y configura lo necesario:

Consejo
Puedes cambiar el directorio y el nombre del archivo (sin extensión) mediante FrameRecorder.RecordingConfiguration.FilePath; la extensión del archivo se añade automáticamente según el formato de grabación.
Si el archivo se guarda en la ruta de datos persistentes de la aplicación o en otra ruta privada, puedes exportarlo al ordenador de las siguientes maneras:
- En Android, conecta el dispositivo al ordenador por USB y usa
adb pullu otro método para exportar el archivo; normalmente está en/sdcarad/Android/data/<app package name>/files. - En iOS, usa la ventana Devices de Xcode para exportar el archivo al ordenador, o accede al directorio privado de la aplicación mediante Compartir archivos de iTunes o Finder.
- Guarda el archivo en un directorio público mediante código, por ejemplo el directorio de Descargas en Android o Fotos en iOS.
Nota
Para aplicaciones iOS, si quieres acceder al directorio privado de la aplicación mediante Compartir archivos de iTunes o Finder, antes de empaquetar debes añadir la clave UIFileSharingEnabled al Info.plist del proyecto Xcode y establecerla en YES:

El texto mostrado después de añadirlo es distinto de la cadena introducida; eso es normal.
Cambiar el formato de grabación
Cambiar el formato de grabación mediante FrameRecorder.Configuration.Format debe hacerse antes de iniciar la grabación.
Por ejemplo, el siguiente código fuerza el formato de grabación a H264:
frameRecorder.Configuration.Format = FrameRecorder.InternalFormat.H264;
También puedes configurarlo en el editor: selecciona AR Session (EasyAR) y modifica Format en la ventana Inspector:

Nota
H264 no puede usarse en algunos dispositivos (por ejemplo Windows); normalmente se recomienda Auto, que elegirá automáticamente el formato adecuado según el dispositivo.
Nota
En XREAL, los datos grabados con el formato Obsolete no pueden usarse para simular la ejecución; este formato debe usarse solo para enviar feedback sobre problemas.
Puedes usar RecordingFormat para ver el formato de grabación actual.
Grabación automática al iniciar la session
Si estableces AutoStart en true antes de iniciar la session, la grabación comenzará cuando se inicie la session, por ejemplo:
frameRecorder.AutoStart = true;
También puedes hacerlo en el editor: selecciona AR Session (EasyAR) y marca Auto Start en Frame Recorder:

Nota
Cambiar FrameRecorder.enabled en el editor no tiene efecto.
Datos disponibles para Mega
Cuando se usa Mega, hay algunos requisitos especiales para EIF y archivos relacionados. En versiones antiguas del plugin de Unity no existían estas funciones, por lo que los datos grabados con esas versiones no pueden usarse con Mega.
Los datos grabados pueden usarse con Mega en los siguientes casos:
- Datos grabados con Unity Plugin versión 4000 o superior
- Datos grabados con Mega Toolbox
- Si los datos se grabaron con el formato Obsolete, por ejemplo el archivo
x.eif, debe existir también el archivox.eif.jsonen el mismo directorio para poder usarlos
Los datos grabados no pueden usarse con Mega en los siguientes casos:
- Datos grabados con Unity Plugin 4.6 o inferior
- Datos grabados con EasyAR Sense nativo sin añadir el mismo contenido que en el plugin de Unity
Además, aunque Mega puede funcionar sin seguimiento de movimiento, el resultado no será el mismo. Se recomienda activar la función de seguimiento de movimiento al grabar archivos EIF para garantizar que el resultado de reproducción se ajuste a la mayoría de los escenarios de uso.