Table of Contents

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

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:

  • Si el formato de grabación es H264, el archivo EIF no podrá saltar a un punto de tiempo específico durante la reproducción (seek), solo podrá reproducirse desde el principio
  • Si el formato de grabación es Obsolete, el archivo EIF no podrá 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:

alt text

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 formato de grabación es H264, la extensión es .mkveif
  • Si el formato de grabación es Obsolete, la extensión es .eif

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

alt text

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:

alt text

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.

  • Para simulación, usa datos grabados con el formato H264.
  • Para feedback de problemas, usa datos grabados con el formato Obsolete.

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:

alt text

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

Siguientes pasos