Grabar archivos EIF en Unity
Este artículo explica cómo grabar archivos EIF en Unity para usarlos en simulaciones.
Antes de comenzar
- Comprender los conceptos básicos de grabar archivos EIF y usarlos para simulaciones
- Comprender los conceptos básicos, componentes y flujo de trabajo de una sesión AR
- Aprender a acceder al componente de grabación mediante acceder a componentes de funcionalidad AR en la sesión
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;
}
Es importante verificar primero si existe ARAssembly.FrameRecorder.
Nota
ARAssembly.FrameRecorder no está disponible en algunos casos, como 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 comenzará durante la ejecución de la sesión cuando 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(() => {
// Puedes comenzar a grabar
});
Puedes usar el evento OnRecording para confirmar el inicio exitoso:
frameRecorder.OnRecording.AddListener((file) =>
{
Debug.Log($"Recording started: {file}");
});
No hay evento para fallos de inicio, pero puedes verificarlo comprobando si FrameRecorder.Status es Error.
Importante
El comportamiento durante la reproducción de EIF en la escena depende del dispositivo utilizado para la grabación y del frame source seleccionado en ese momento. Por lo tanto, al grabar archivos EIF, se recomienda usar un dispositivo idéntico o similar al dispositivo objetivo para garantizar que la reproducción coincida con el efecto en el dispositivo objetivo. También es importante verificar si la función de seguimiento de movimiento está habilitada en la escena de grabación. Si no está habilitada durante la grabación, tampoco se podrá habilitar durante la reproducción, y las funciones AR que dependen del seguimiento de movimiento (como mapas espaciales densos o Mega) no funcionarán de manera consistente con el dispositivo.
Detener la grabación
Usa FrameRecorder.enabled = false para detener la grabación, por ejemplo:
frameRecorder.enabled = false;
Esta acción detiene la grabación inmediatamente y se bloquea hasta que se completa la escritura del archivo.
Importante
Debes llamar a detener la grabación; de lo contrario, el archivo grabado estará incompleto, lo que puede hacer que algunas funciones o todo el archivo sean inutilizables:
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, los archivos grabados se almacenan en la ruta de datos persistentes de la aplicación, accesible mediante Application.persistentDataPath.
Puedes modificar la ruta de almacenamiento mediante FrameRecorder.Configuration.FilePath. Esta ruta debe configurarse antes de iniciar la grabación y solo surtirá efecto después de desactivar AutoFilePath. Es necesario crear el directorio de antemano.
Importante
Debes asegurarte de que el directorio de almacenamiento del archivo grabado exista y que la aplicación tenga permisos de escritura; de lo contrario, la grabación fallará al iniciarse.
Por ejemplo, el siguiente código muestra cómo almacenar el archivo grabado en un directorio personalizado y generar un nombre de archivo basado en el tipo de FrameSource utilizado por la sesión 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, en el editor, seleccionar AR Session (EasyAR), desmarcar Auto File Path en Frame Recorder en la ventana Inspector y luego configurar:

Consejo
Mediante FrameRecorder.RecordingConfiguration.FilePath puedes modificar el directorio de almacenamiento y el nombre del archivo (sin extensión). La extensión del archivo se agregará automáticamente según el formato de grabación.
Si el archivo se almacena en la ruta de datos persistentes de la aplicación u otra ruta privada, puedes exportarlo a tu computadora de las siguientes maneras:
- En Android, conecta el dispositivo a la computadora mediante USB y usa
adb pullu otro método para exportar el archivo. Los archivos suelen estar en/sdcarad/Android/data/<app package name>/files. - En iOS, usa la ventana Devices de Xcode para exportar el archivo, o accede al directorio privado de la aplicación mediante iTunes o el intercambio de archivos de Finder.
- Mediante código, guarda el archivo en un directorio público, como la carpeta de descargas en Android o el álbum de fotos en iOS.
Nota
Para aplicaciones iOS, si deseas acceder al directorio privado de la aplicación mediante iTunes o el intercambio de archivos de Finder, debes agregar la clave UIFileSharingEnabled al archivo Info.plist del proyecto en XCode antes de compilar y establecer su valor en YES:

El texto mostrado después de agregarlo puede diferir de la cadena agregada; esto es normal.
Cambiar el formato de grabación
Cambia el formato de grabación mediante FrameRecorder.Configuration.Format. Debe configurarse antes de iniciar la grabación.
Por ejemplo, el siguiente código muestra cómo forzar el formato de grabación a H264:
frameRecorder.Configuration.Format = FrameRecorder.InternalFormat.H264;
También puedes, en el editor, seleccionar AR Session (EasyAR) y modificar Format en la ventana Inspector:

Nota
H264 no está disponible en algunos dispositivos (como Windows). Generalmente se recomienda usar Auto, que seleccionará automáticamente el formato adecuado según el dispositivo.
Nota
En XREAL, grabar datos con formato Obsolete no se puede usar para simulaciones; está destinado únicamente para informar problemas.
Puedes usar RecordingFormat para ver el formato de grabación actual.
Grabar automáticamente al iniciar la sesión
Configura AutoStart en true antes de iniciar la sesión para iniciar la grabación al comenzar la sesión, por ejemplo:
frameRecorder.AutoStart = true;
También puedes, en el editor, seleccionar AR Session (EasyAR) y marcar Auto Start en Frame Recorder en la ventana Inspector:

Nota
Modificar FrameRecorder.enabled en el editor no tiene efecto.
Datos utilizables con Mega
Al usar Mega, existen requisitos especiales para el contenido de los archivos EIF y relacionados. En versiones antiguas del plugin de Unity no se integraron estas funcionalidades, por lo que los datos grabados con esas versiones no son compatibles con Mega.
Los siguientes casos producen datos utilizables con Mega:
- Datos grabados con el plugin de Unity versión 4000 o superior
- Datos grabados con Mega Toolbox
- Si los datos se grabaron con formato Obsolete, por ejemplo, el archivo
x.eif, debe existir un archivox.eif.jsonen el mismo directorio para poder usarlo
Los siguientes casos producen datos no utilizables con Mega:
- Datos grabados con el plugin de Unity versión 4.6 o inferior
- Datos grabados con EasyAR Sense nativo sin agregar el mismo contenido que en el plugin de Unity
Además, aunque Mega puede funcionar sin seguimiento de movimiento, el comportamiento es diferente. Se recomienda habilitar el seguimiento de movimiento al grabar archivos EIF para garantizar que la reproducción cumpla con la mayoría de los casos de uso.