Enregistrer des fichiers EIF dans Unity
Cet article explique comment enregistrer des fichiers EIF dans Unity afin de pouvoir les utiliser pour la simulation.
Avant de commencer
- Les notions de base de l’enregistrement d’un fichier EIF et de son utilisation pour la simulation
- Les notions de base, la composition et le flux de travail de AR Session
- Comprendre comment accéder au composant d’enregistrement via accéder aux composants AR de la session
Démarrer l’enregistrement
Utilisez FrameRecorder.enabled = true pour démarrer l’enregistrement, par exemple :
if (Session.State >= ARSession.SessionState.Ready && Session.Assembly.FrameRecorder.OnSome)
{
var frameRecorder = Session.Assembly.FrameRecorder.Value;
frameRecorder.enabled = true;
}
Il faut d’abord vérifier si ARAssembly.FrameRecorder existe.
Note
ARAssembly.FrameRecorder n’est pas utilisable dans certains cas, par exemple lors de l’utilisation de FramePlayer.
La valeur par défaut de FrameRecorder.enabled est false, ce qui signifie que l’enregistrement est désactivé ; même une configuration manuelle dans l’éditeur n’a alors aucun effet.
L’enregistrement ne démarre que lorsque, pendant l’exécution de la session, FrameRecorder.Status >= FrameRecorder.RecorderStatus.Ready.
Si FrameRecorder.Status < FrameRecorder.RecorderStatus.Ready, vous pouvez utiliser l’événement OnReady pour attendre que l’enregistrement soit prêt.
Session.GetComponent<FrameRecorder>().OnReady.AddListener(() => {
// L’enregistrement peut commencer
});
Vous pouvez utiliser l’événement OnRecording pour confirmer que le démarrage a réussi :
frameRecorder.OnRecording.AddListener((file) =>
{
Debug.Log($"Recording started: {file}");
});
Si le démarrage échoue, aucun événement n’est déclenché, mais vous pouvez vérifier si FrameRecorder.Status est Error pour le confirmer.
Important
Le résultat d’exécution lors de la lecture EIF dans la scène dépend de l’appareil utilisé pour l’enregistrement ainsi que de la frame source choisie à ce moment-là. Il est donc recommandé d’utiliser lors de l’enregistrement un appareil identique ou proche de l’appareil cible, afin de garantir que l’effet de lecture soit cohérent avec celui de l’appareil cible. Il faut aussi prêter une attention particulière à l’activation ou non de la fonction de suivi de mouvement dans la scène enregistrée. Si elle n’était pas activée lors de l’enregistrement, elle ne pourra pas non plus être activée lors de la lecture, et les fonctions AR qui en dépendent (par exemple la cartographie spatiale dense, Mega, etc.) ne fonctionneront pas de la même manière que sur l’appareil.
Arrêter l’enregistrement
Utilisez FrameRecorder.enabled = false pour arrêter l’enregistrement, par exemple :
frameRecorder.enabled = false;
Cette opération arrête immédiatement l’enregistrement et bloque jusqu’à la fin de l’écriture du fichier.
Important
Vous devez appeler l’arrêt de l’enregistrement ; sinon, le fichier enregistré sera incomplet et certaines fonctions, voire tout le fichier, ne pourront pas être utilisées :
Stockage et export des fichiers
Vous pouvez utiliser l’événement OnRecording pour obtenir le chemin réel complet du fichier enregistré :
frameRecorder.OnRecording.AddListener((file) =>
{
Debug.Log($"Recording started: {file}");
});
Avec la configuration par défaut, le fichier enregistré est stocké dans le chemin de données persistantes de l’application, auquel vous pouvez accéder via Application.persistentDataPath.
Vous pouvez modifier le chemin de stockage avec FrameRecorder.Configuration.FilePath. Ce chemin doit être défini avant de démarrer l’enregistrement, et il ne sera pris en compte qu’après désactivation de AutoFilePath. Le dossier doit être créé à l’avance.
Important
Le répertoire de stockage du fichier enregistré doit exister et être inscriptible par l’application, sinon le démarrage de l’enregistrement échouera.
Par exemple, le code suivant montre comment stocker le fichier dans un répertoire personnalisé et générer un nom de fichier selon le type de FrameSource utilisé par la session et l’heure actuelle :
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;
Vous pouvez aussi le configurer dans l’éditeur : sélectionnez AR Session (EasyAR) et, dans la fenêtre Inspector, décochez Auto File Path de Frame Recorder puis configurez la suite :

Astuce
Vous pouvez modifier le répertoire de stockage et le nom du fichier (sans extension) via FrameRecorder.RecordingConfiguration.FilePath ; l’extension est ajoutée automatiquement selon le format d’enregistrement.
Si le fichier est stocké dans le chemin de données persistantes de l’application ou dans un autre chemin privé, vous pouvez l’exporter vers l’ordinateur de plusieurs façons :
- Sur Android, connectez l’appareil à l’ordinateur en USB et utilisez
adb pullou un autre moyen pour exporter le fichier ; il se trouve généralement dans/sdcarad/Android/data/<app package name>/files. - Sur iOS, utilisez la fenêtre Devices de Xcode pour exporter le fichier vers l’ordinateur, ou utilisez le partage de fichiers iTunes ou Finder pour accéder au répertoire privé de l’application.
- Stockez le fichier dans un répertoire public via le code, par exemple le dossier Téléchargements sur Android ou Photos sur iOS.
Note
Pour les applications iOS, si vous souhaitez accéder au répertoire privé de l’application via le partage de fichiers iTunes ou Finder, vous devez ajouter la clé UIFileSharingEnabled dans le fichier Info.plist du projet Xcode avant le packaging, et la définir sur YES :

Le texte affiché après l’ajout est différent de la chaîne saisie ; c’est normal.
Changer le format d’enregistrement
Changez le format d’enregistrement via FrameRecorder.Configuration.Format, et cela doit être défini avant de démarrer l’enregistrement.
Par exemple, le code suivant force le format d’enregistrement à H264 :
frameRecorder.Configuration.Format = FrameRecorder.InternalFormat.H264;
Vous pouvez aussi le configurer dans l’éditeur : sélectionnez AR Session (EasyAR) et modifiez Format dans la fenêtre Inspector :

Note
H264 n’est pas utilisable sur certains appareils (par exemple Windows) ; il est généralement recommandé d’utiliser Auto, qui choisira automatiquement le format adapté à l’appareil.
Note
Sur XREAL, les données enregistrées avec le format Obsolete ne peuvent pas être utilisées pour simuler l’exécution ; ce format doit être utilisé uniquement pour remonter des problèmes.
Vous pouvez utiliser RecordingFormat pour consulter le format d’enregistrement actuel.
Enregistrement automatique au démarrage de la session
Si vous définissez AutoStart sur true avant de démarrer la session, l’enregistrement démarrera au lancement de la session, par exemple :
frameRecorder.AutoStart = true;
Vous pouvez aussi le faire dans l’éditeur : sélectionnez AR Session (EasyAR) et cochez Auto Start dans Frame Recorder :

Note
Modifier FrameRecorder.enabled dans l’éditeur n’a aucun effet.
Données utilisables pour Mega
Lors de l’utilisation de Mega, certains fichiers EIF et fichiers associés ont des exigences particulières. Dans les anciennes versions du plugin Unity, ces fonctions n’étaient pas intégrées, et les données enregistrées avec ces versions ne peuvent pas être utilisées avec Mega.
Les données enregistrées peuvent être utilisées avec Mega dans les cas suivants :
- Données enregistrées avec le plugin Unity version 4000 ou supérieure
- Données enregistrées avec Mega Toolbox
- Si les données ont été enregistrées au format Obsolete, par exemple le fichier
x.eif, le fichierx.eif.jsondoit exister dans le même répertoire pour pouvoir les utiliser
Les données enregistrées ne peuvent pas être utilisées avec Mega dans les cas suivants :
- Données enregistrées avec le plugin Unity 4.6 ou inférieur
- Données enregistrées avec EasyAR Sense natif sans ajouter le même contenu que dans le plugin Unity
Par ailleurs, même si Mega peut fonctionner sans suivi de mouvement, les résultats ne seront pas les mêmes. Il est recommandé d’activer la fonction de suivi de mouvement lors de l’enregistrement des fichiers EIF, afin de garantir que l’effet de lecture corresponde à la plupart des scénarios d’usage.