Grabar archivos eif en unity
Este artículo describe cómo grabar archivos eif en unity para su uso en simulaciones.
Antes de comenzar
- Comprender los conceptos básicos de grabar archivos eif y usarlos para simulaciones
- Comprender los conceptos básicos, composición y flujo de trabajo de sesión ar
- Aprender cómo acceder al componente de grabación a través de acceder a componentes funcionales 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 notar que primero se debe verificar si existe ARAssembly.FrameRecorder.
Nota
ARAssembly.FrameRecorder no está disponible en algunos casos, como cuando se usa FramePlayer.
FrameRecorder.enabled tiene un valor predeterminado de false, lo que significa que la grabación está desactivada, incluso si se configura manualmente en el editor.
La grabación comenzará durante la ejecución de la sesión, cuando FrameRecorder.Status >= FrameRecorder.RecorderStatus.Ready.
Si FrameRecorder.Status < FrameRecorder.RecorderStatus.Ready, se puede usar el evento OnReady para esperar a que la grabación esté lista.
Session.GetComponent<FrameRecorder>().OnReady.AddListener(() => {
// Se puede iniciar la grabación
});
Se puede usar el evento OnRecording para confirmar que se inició correctamente:
frameRecorder.OnRecording.AddListener((file) =>
{
Debug.Log($"Recording started: {file}");
});
No hay evento para fallos al iniciar, pero se puede verificar si FrameRecorder.Status es Error.
Importante
El efecto de reproducción en escena de un eif depende del dispositivo usado para grabarlo y del frame source seleccionado en ese momento. Por lo tanto, al grabar archivos eif, se recomienda usar dispositivos idénticos o similares al dispositivo objetivo, para garantizar efectos consistentes. También es crucial verificar si el seguimiento de movimiento estaba habilitado durante la grabación, ya que si no estaba habilitado, durante la reproducción tampoco podrá habilitarse, y las funciones ar que dependen del seguimiento de movimiento (como mapas espaciales densos o mega) no 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 acción detendrá la grabación inmediatamente y se bloqueará hasta que se complete la escritura del archivo.
Importante
Se debe llamar a detener la grabación, de lo contrario el archivo estará incompleto y podría ser inutilizable:
Almacenamiento y exportación de archivos
Puedes usar el evento OnRecording para obtener la ruta completa del archivo grabado:
frameRecorder.OnRecording.AddListener((file) =>
{
Debug.Log($"Recording started: {file}");
});
De forma predeterminada, los archivos grabados se almacenan en la ruta de datos persistentes de la aplicación, accesible a través de 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 previamente.
Importante
Se debe garantizar que el directorio de almacenamiento exista y que la aplicación tenga permisos de escritura, de lo contrario la grabación fallará al iniciar.
Por ejemplo, este código muestra cómo almacenar el archivo en un directorio personalizado, generando un nombre de archivo basado en el tipo de FrameSource de 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), y en la ventana Inspector desmarcar Auto File Path de Frame Recorder para configurarlo:

Consejo
A través de FrameRecorder.RecordingConfiguration.FilePath puedes modificar el directorio de almacenamiento y el nombre del archivo (sin extensión). La extensión se agregará automáticamente según el formato de grabación.
Si el archivo se almacena en la ruta de datos persistentes u otra ruta privada, puedes exportarlo a una computadora mediante:
- Android: Conectar el dispositivo por USB y usar
adb pullu otro método para exportar el archivo, generalmente ubicado en/sdcarad/Android/data/<app package name>/files. - iOS: Exportar a través de la ventana Devices de Xcode, o mediante intercambio de archivos de iTunes o Finder.
- Mediante código, almacenar el archivo en un directorio público, como Descargas en Android o Fotos en iOS.
Nota
Para aplicaciones iOS, si deseas acceder al directorio privado mediante iTunes o Finder, debes agregar la clave UIFileSharingEnabled con valor YES en Info.plist del proyecto de XCode antes de compilar:

El texto mostrado puede diferir de la cadena agregada, lo cual es normal.
Cambiar el formato de grabación
Modifica el formato de grabación mediante FrameRecorder.Configuration.Format. Debe configurarse antes de iniciar la grabación.
Por ejemplo, este código fuerza el formato a H264:
frameRecorder.Configuration.Format = FrameRecorder.InternalFormat.H264;
También puedes, en el editor, seleccionar AR Session (EasyAR), y en la ventana Inspector modificar Format:

Nota
H264 no está disponible en algunos dispositivos (como Windows). Generalmente se recomienda usar Auto, que seleccionará automáticamente un formato adecuado según el dispositivo.
Nota
En XREAL, los datos grabados en formato Obsolete no pueden usarse para simulaciones, solo para reportar problemas.
Puedes ver el formato actual mediante RecordingFormat.
Grabación automática al iniciar la sesión
Configura AutoStart como true antes de iniciar la sesión para iniciar la grabación automáticamente:
frameRecorder.AutoStart = true;
También puedes, en el editor, seleccionar AR Session (EasyAR), y en la ventana Inspector marcar Auto Start de Frame Recorder:

Nota
Modificar FrameRecorder.enabled en el editor no tiene efecto.
Datos compatibles con mega
Al usar mega, existen requisitos especiales para el contenido de archivos eif y relacionados. En versiones antiguas del plugin de Unity no se integraban estas funcionalidades, por lo que los datos grabados con esas versiones no son compatibles con mega.
Los datos grabados en estas situaciones son compatibles con mega:
- Datos grabados con el plugin de Unity 4000 o superior
- Datos grabados con Mega Toolbox
- Si los datos se grabaron en formato Obsolete (ej. archivo
x.eif), debe existir un archivox.eif.jsonen el mismo directorio
Los datos grabados en estas situaciones no son compatibles con mega:
- Datos grabados con el plugin de Unity 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, los efectos son diferentes. Se recomienda habilitar el seguimiento de movimiento al grabar archivos eif para garantizar efectos consistentes en la mayoría de escenarios.