Table of Contents

Registrare file EIF in Unity

Questo articolo spiega come registrare file EIF in Unity per poterli usare nella simulazione.

Prima di iniziare

Avviare la registrazione

Usa FrameRecorder.enabled = true per avviare la registrazione, ad esempio:

if (Session.State >= ARSession.SessionState.Ready && Session.Assembly.FrameRecorder.OnSome)
{
    var frameRecorder = Session.Assembly.FrameRecorder.Value;
    frameRecorder.enabled = true;
}

Bisogna prima verificare se ARAssembly.FrameRecorder esiste.

Nota

ARAssembly.FrameRecorder non può essere usato in alcuni casi, ad esempio quando si usa FramePlayer.

Il valore predefinito di FrameRecorder.enabled è false, il che significa che la registrazione è disattivata; anche una configurazione manuale nell'editor non avrà effetto.

La registrazione inizierà solo quando, durante l'esecuzione della session, FrameRecorder.Status >= FrameRecorder.RecorderStatus.Ready.

Se FrameRecorder.Status < FrameRecorder.RecorderStatus.Ready, puoi usare l'evento OnReady per aspettare che la registrazione sia pronta.

Session.GetComponent<FrameRecorder>().OnReady.AddListener(() => {
    // La registrazione può iniziare
});

Puoi usare l'evento OnRecording per confermare che l'avvio sia riuscito:

frameRecorder.OnRecording.AddListener((file) =>
{
    Debug.Log($"Recording started: {file}");
});

Se l'avvio fallisce, non viene attivato alcun evento, ma puoi controllare se FrameRecorder.Status è Error per confermarlo.

Importante

Il risultato di esecuzione durante la riproduzione EIF nella scena dipende dal dispositivo usato per registrare e dalla frame source scelta in quel momento. Per questo, quando registri EIF, è consigliato usare un dispositivo uguale o simile al dispositivo di destinazione, così da garantire che l'effetto di riproduzione sia coerente con quello del dispositivo target. Bisogna anche prestare attenzione a se la funzione di tracking del movimento nella scena era attiva durante la registrazione. Se non era attiva durante la registrazione, non potrà esserlo nemmeno durante la riproduzione, e le funzioni AR che dipendono dal tracking del movimento (per esempio la mappatura spaziale densa, Mega, ecc.) non funzioneranno come sul dispositivo.

Arrestare la registrazione

Usa FrameRecorder.enabled = false per arrestare la registrazione, ad esempio:

frameRecorder.enabled = false;

Questa operazione arresta immediatamente la registrazione e blocca finché il file non è stato scritto del tutto.

Importante

Devi chiamare l'arresto della registrazione; altrimenti il file registrato sarà incompleto e alcune funzioni, o persino l'intero file, non potranno essere usate:

  • Se il formato di registrazione è H264, il file EIF non potrà saltare a un punto temporale specifico durante la riproduzione (seek), ma potrà essere riprodotto solo dall'inizio
  • Se il formato di registrazione è Obsolete, il file EIF non potrà essere usato

Archiviazione ed esportazione dei file

Puoi usare l'evento OnRecording per ottenere il percorso reale completo del file registrato:

frameRecorder.OnRecording.AddListener((file) =>
{
    Debug.Log($"Recording started: {file}");
});

Con la configurazione predefinita, il file registrato viene salvato nel percorso dei dati persistenti dell'applicazione, accessibile tramite Application.persistentDataPath.

Puoi modificare il percorso di salvataggio con FrameRecorder.Configuration.FilePath. Questo percorso deve essere impostato prima dell'avvio della registrazione e funzionerà solo dopo aver disattivato AutoFilePath. Devi creare in anticipo la cartella.

Importante

Devi assicurarti che la cartella di salvataggio del file registrato esista e sia scrivibile dall'applicazione, altrimenti l'avvio della registrazione fallirà.

Per esempio, il codice seguente mostra come salvare il file registrato in una cartella personalizzata e generare il nome del file in base al tipo di FrameSource usato dalla session e all'ora corrente:

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;

Puoi anche configurarlo nell'editor: seleziona AR Session (EasyAR) e, nella finestra Inspector, deseleziona Auto File Path in Frame Recorder e configura il resto:

alt text

Consiglio

Puoi modificare la cartella di salvataggio e il nome del file (senza estensione) tramite FrameRecorder.RecordingConfiguration.FilePath; l'estensione viene aggiunta automaticamente in base al formato di registrazione.

  • Se il formato di registrazione è H264, l'estensione è .mkveif
  • Se il formato di registrazione è Obsolete, l'estensione è .eif

Se il file è salvato nel percorso dei dati persistenti dell'applicazione o in un altro percorso privato, puoi esportarlo sul computer nei seguenti modi:

  • Su Android, collega il dispositivo al computer via USB e usa adb pull o altri metodi per esportare il file; di solito si trova in /sdcarad/Android/data/<app package name>/files.
  • Su iOS, usa la finestra Devices di Xcode per esportare il file sul computer, oppure accedi alla directory privata dell'app tramite condivisione file di iTunes o Finder.
  • Salva il file in una directory pubblica tramite codice, ad esempio la cartella Download su Android o Foto su iOS.
Nota

Per le app iOS, se vuoi accedere alla directory privata dell'app tramite condivisione file di iTunes o Finder, prima del packaging devi aggiungere la chiave UIFileSharingEnabled a Info.plist del progetto Xcode e impostarla su YES:

alt text

Il testo visualizzato dopo l'aggiunta è diverso dalla stringa inserita; è normale.

Cambiare il formato di registrazione

Cambia il formato di registrazione tramite FrameRecorder.Configuration.Format, e deve essere impostato prima di avviare la registrazione.

Per esempio, il codice seguente forza il formato di registrazione a H264:

frameRecorder.Configuration.Format = FrameRecorder.InternalFormat.H264;

Puoi anche configurarlo nell'editor: seleziona AR Session (EasyAR) e modifica Format nella finestra Inspector:

alt text

Nota

H264 non è utilizzabile su alcuni dispositivi (ad esempio Windows); in genere è consigliato Auto, che sceglierà automaticamente il formato adatto al dispositivo.

Nota

Su XREAL, i dati registrati con il formato Obsolete non possono essere usati per simulare l'esecuzione; questo formato deve essere usato solo per segnalare problemi.

  • Per la simulazione, usa dati registrati con il formato H264.
  • Per segnalare problemi, usa dati registrati con il formato Obsolete.

Puoi usare RecordingFormat per vedere il formato di registrazione corrente.

Registrazione automatica all'avvio della session

Se imposti AutoStart su true prima di avviare la session, la registrazione inizierà quando la session si avvia, ad esempio:

frameRecorder.AutoStart = true;

Puoi anche farlo nell'editor: seleziona AR Session (EasyAR) e spunta Auto Start in Frame Recorder:

alt text

Nota

Modificare FrameRecorder.enabled nell'editor non ha effetto.

Dati utilizzabili per Mega

Quando si usa Mega, ci sono alcuni requisiti speciali per EIF e i file correlati. Nelle versioni vecchie del plugin Unity, queste funzioni non erano integrate, e i dati registrati con quelle versioni non possono essere usati con Mega.

I dati registrati possono essere usati con Mega nei seguenti casi:

  • Dati registrati con Unity Plugin versione 4000 o superiore
  • Dati registrati con Mega Toolbox
  • Se i dati sono stati registrati con il formato Obsolete, per esempio il file x.eif, deve esistere anche il file x.eif.json nella stessa directory per poterlo usare

I dati registrati non possono essere usati con Mega nei seguenti casi:

  • Dati registrati con Unity Plugin 4.6 o inferiore
  • Dati registrati con EasyAR Sense nativo senza aggiungere gli stessi contenuti del plugin Unity

Inoltre, anche se Mega può funzionare senza tracking del movimento, il risultato sarà diverso. Si consiglia di attivare la funzione di tracking del movimento quando si registrano i file EIF, per garantire che l'effetto di riproduzione sia adatto alla maggior parte degli scenari d'uso.

Passi successivi