Table of Contents

Grabar archivos EIF en Unity

Este artículo explica cómo grabar archivos EIF en Unity para usarlos en simulaciones.

Antes de comenzar

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:

  • Cuando el formato de grabación es H264, el archivo EIF no podrá saltar a un punto de tiempo específico para reproducir (seek), solo se podrá reproducir desde el principio
  • Cuando el formato de grabación es Obsolete, el archivo EIF no se podrá usar

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:

alt text

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.

  • Cuando el formato de grabación es H264, la extensión del archivo es .mkveif
  • Cuando el formato de grabación es Obsolete, la extensión del archivo es .eif

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 pull u 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:

alt text

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:

alt text

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.

  • Para simulaciones, usa datos grabados con formato H264.
  • Para informar problemas, usa datos grabados con formato Obsolete.

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:

alt text

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 archivo x.eif.json en 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.

Próximos pasos