Table of Contents

Enregistrement de fichiers EIF dans Unity

Cet article explique comment enregistrer des fichiers EIF dans Unity pour les utiliser dans des simulations.

Avant de commencer

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;
}

Notez qu'il faut d'abord vérifier si ARAssembly.FrameRecorder existe.

Note

ARAssembly.FrameRecorder ne peut pas être utilisé dans certains cas, comme lorsqu'on utilise 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 est inefficace.

L'enregistrement ne commencera 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(() => {
    // Peut démarrer l'enregistrement
});

Vous pouvez utiliser l'événement OnRecording pour confirmer le succès du démarrage :

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

Un échec de démarrage ne déclenche aucun événement, mais vous pouvez le confirmer en vérifiant si FrameRecorder.Status est Error.

Important

L'effet d'exécution lors de la lecture d'un EIF dans la scène dépend de l'appareil utilisé pour l'enregistrement et de la source d'images choisie à ce moment-là sur l'appareil. Par conséquent, lors de l'enregistrement d'un fichier EIF, il est recommandé d'utiliser un appareil identique ou similaire à l'appareil cible pour garantir que l'effet de lecture soit cohérent avec celui sur l'appareil cible. Il faut également veiller à ce que le suivi des mouvements soit activé dans la scène d'enregistrement. S'il n'est pas activé pendant l'enregistrement, il ne pourra pas être activé pendant la lecture, et les fonctionnalités AR qui en dépendent (comme la carte spatiale dense, Mega, etc.) ne fonctionneront pas non plus de manière cohérente avec l'appareil.

Arrêter l'enregistrement

Utilisez FrameRecorder.enabled = false pour arrêter l'enregistrement, par exemple :

frameRecorder.enabled = false;

Cette action arrête immédiatement l'enregistrement et bloque jusqu'à ce que l'écriture du fichier soit terminée.

Important

Il faut impérativement appeler l'arrêt de l'enregistrement, sinon le fichier enregistré sera incomplet, ce qui peut rendre certaines fonctionnalités ou l'ensemble du fichier inutilisable :

  • Lorsque le format d'enregistrement est H264, le fichier EIF ne peut pas être positionné à un point temporel spécifique pour la lecture (seek), il ne peut être lu que depuis le début
  • Lorsque le format d'enregistrement est Obsolete, le fichier EIF ne peut pas être utilisé

Stockage et exportation des fichiers

Vous pouvez utiliser l'événement OnRecording pour obtenir le chemin complet réel du fichier enregistré :

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

Par défaut, le fichier enregistré est stocké dans le chemin des données persistantes de l'application, accessible via Application.persistentDataPath.

Vous pouvez modifier le chemin de stockage du fichier enregistré via FrameRecorder.Configuration.FilePath. Ce chemin doit être défini avant le démarrage de l'enregistrement et ne prend effet que si AutoFilePath est désactivé. Le répertoire doit être créé au préalable.

Important

Il faut s'assurer que le répertoire de stockage du fichier enregistré existe et que l'application peut y écrire, sinon le démarrage de l'enregistrement échouera.

Par exemple, le code suivant montre comment stocker le fichier enregistré dans un répertoire personnalisé et générer un nom de fichier basé sur 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 également, dans l'éditeur, sélectionner AR Session (EasyAR), décocher Auto File Path dans la fenêtre Inspector de Frame Recorder, puis configurer :

alt text

Astuce

Vous pouvez modifier le répertoire de stockage et le nom du fichier (sans extension) via FrameRecorder.RecordingConfiguration.FilePath. L'extension du fichier est ajoutée automatiquement en fonction du format d'enregistrement.

  • Lorsque le format d'enregistrement est H264, l'extension du fichier est .mkveif
  • Lorsque le format d'enregistrement est Obsolete, l'extension du fichier est .eif

Si le fichier est stocké dans le chemin des données persistantes de l'application ou dans un autre chemin privé, vous pouvez l'exporter vers un ordinateur de la manière suivante :

  • Sur Android, connectez l'appareil à l'ordinateur via USB, puis utilisez adb pull ou une autre méthode pour exporter le fichier vers l'ordinateur. Les fichiers se trouvent généralement sous /sdcarad/Android/data/<app package name>/files.
  • Sur iOS, vous pouvez exporter le fichier vers l'ordinateur via la fenêtre Devices de Xcode, ou accéder au répertoire privé de l'application via le partage de fichiers d'iTunes ou de Finder.
  • Utilisez du code pour stocker le fichier dans un répertoire public, comme le répertoire Téléchargements sur Android ou l'album photo sur iOS.
Note

Pour les applications iOS, si vous souhaitez accéder au répertoire privé de l'application via le partage de fichiers d'iTunes ou de Finder, vous devez ajouter la clé UIFileSharingEnabled dans le Info.plist du projet XCode avant la compilation et définir sa valeur sur YES :

alt text

Le texte affiché après l'ajout est différent de la chaîne ajoutée, ce qui est normal.

Changer le format d'enregistrement

Modifiez le format d'enregistrement via FrameRecorder.Configuration.Format. Cela doit être configuré avant le démarrage de l'enregistrement.

Par exemple, le code suivant montre comment forcer le format d'enregistrement à H264 :

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

Vous pouvez également, dans l'éditeur, sélectionner AR Session (EasyAR), puis modifier Format dans la fenêtre Inspector :

alt text

Note

H264 n'est pas disponible sur certains appareils (comme Windows). Il est généralement recommandé d'utiliser Auto, qui choisit automatiquement un format adapté à l'appareil.

Note

Sur XREAL, l'enregistrement de données au format Obsolete ne peut pas être utilisé pour les simulations, il est uniquement destiné au signalement des problèmes.

  • Pour les simulations, utilisez des données enregistrées au format H264.
  • Pour signaler des problèmes, utilisez des données enregistrées au format Obsolete.

Vous pouvez utiliser RecordingFormat pour vérifier le format d'enregistrement actuel.

Enregistrement automatique au démarrage de la session

Définissez AutoStart sur true avant de démarrer la session pour lancer l'enregistrement au démarrage de la session, par exemple :

frameRecorder.AutoStart = true;

Vous pouvez également, dans l'éditeur, sélectionner AR Session (EasyAR), puis cocher Auto Start dans la fenêtre Inspector de Frame Recorder :

alt text

Note

La modification de FrameRecorder.enabled dans l'éditeur est inefficace.

Données utilisables avec Mega

Lors de l'utilisation de Mega, il y a des exigences particulières concernant le contenu des fichiers EIF et des fichiers associés. Dans les anciennes versions du plugin Unity, ces fonctionnalités 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 dans les cas suivants peuvent être utilisées avec Mega :

  • Données enregistrées avec le plugin Unity 4000 ou une version ultérieure
  • Données enregistrées avec Mega Toolbox
  • Si les données sont enregistrées au format Obsolete, par exemple le fichier x.eif, il doit y avoir un fichier x.eif.json dans le même répertoire pour pouvoir être utilisées

Les données enregistrées dans les cas suivants ne peuvent pas être utilisées avec Mega :

  • Données enregistrées avec le plugin Unity 4.6 ou une version antérieure
  • Données enregistrées avec EasyAR Sense natif, sans ajout du contenu identique à celui du plugin Unity

De plus, bien que Mega puisse fonctionner sans suivi des mouvements, l'effet d'exécution est différent. Il est recommandé d'activer le suivi des mouvements lors de l'enregistrement de fichiers EIF pour garantir que l'effet de lecture réponde à la plupart des scénarios d'utilisation.

Étapes suivantes