Aufnahme von EIF-Dateien in Unity
Dieser Artikel beschreibt, wie EIF-Dateien in Unity aufgenommen werden, um sie für Simulationsläufe zu verwenden.
Vor dem Start
- Verstehen der grundlegenden Konzepte von Aufnahme von EIF-Dateien und Verwendung für Simulationsläufe
- Verstehen der grundlegenden Konzepte, Komponenten und des Arbeitsablaufs einer AR-Session
- Verstehen, wie Aufnahmekomponenten über Zugriff auf AR-Funktionskomponenten in der Session zugegriffen werden
Aufnahme starten
Verwenden Sie FrameRecorder.enabled = true, um die Aufnahme zu starten, z.B.:
if (Session.State >= ARSession.SessionState.Ready && Session.Assembly.FrameRecorder.OnSome)
{
var frameRecorder = Session.Assembly.FrameRecorder.Value;
frameRecorder.enabled = true;
}
Beachten Sie, dass hier zuerst geprüft werden muss, ob ARAssembly.FrameRecorder vorhanden ist.
Anmerkung
ARAssembly.FrameRecorder kann in seltenen Fällen, z.B. bei Verwendung von FramePlayer, nicht verwendet werden.
FrameRecorder.enabled ist standardmäßig false, was bedeutet, dass die Aufnahme deaktiviert ist. Selbst manuelle Konfigurationen im Editor sind in diesem Fall wirkungslos.
Die Aufnahme beginnt erst während des Session-Betriebs, wenn FrameRecorder.Status >= FrameRecorder.RecorderStatus.Ready ist.
Wenn FrameRecorder.Status < FrameRecorder.RecorderStatus.Ready ist, können Sie das Ereignis OnReady verwenden, um auf die Bereitschaft der Aufnahme zu warten.
Session.GetComponent<FrameRecorder>().OnReady.AddListener(() => {
// Aufnahme kann gestartet werden
});
Sie können das Ereignis OnRecording verwenden, um den erfolgreichen Start zu bestätigen:
frameRecorder.OnRecording.AddListener((file) =>
{
Debug.Log($"Aufnahme gestartet: {file}");
});
Bei einem fehlgeschlagenen Start wird kein Ereignis ausgelöst, aber Sie können dies überprüfen, indem Sie prüfen, ob FrameRecorder.Status den Wert Error hat.
Wichtig
Die Laufleistung beim Abspielen von EIFs in der Szene hängt vom Aufnahmegerät und dem während der Aufnahme verwendeten Frame-Source ab. Daher wird empfohlen, bei der Aufnahme von EIF-Dateien ein Gerät zu verwenden, das dem Zielgerät entspricht oder diesem nahe kommt, um eine konsistente Wiedergabe zu gewährleisten. Besonderes Augenmerk sollte auf die Bewegungsverfolgungsfunktion in der Aufnahmeszene gelegt werden. Wenn die Bewegungsverfolgung während der Aufnahme nicht aktiviert war, kann sie auch während der Wiedergabe nicht aktiviert werden. AR-Funktionen, die von der Bewegungsverfolgung abhängig (wie dichte Raumkarten oder Mega), funktionieren dann nicht konsistent mit dem Gerätebetrieb.
Aufnahme stoppen
Verwenden Sie FrameRecorder.enabled = false, um die Aufnahme zu stoppen, z.B.:
frameRecorder.enabled = false;
Diese Aktion stoppt die Aufnahme sofort und blockiert, bis der Dateischreibvorgang abgeschlossen ist.
Wichtig
Das Stoppen der Aufnahme muss aufgerufen werden, da sonst die Aufnahmedatei unvollständig geschrieben wird. Dies kann dazu führen, dass Teile der Funktionalität oder die gesamte Datei unbrauchbar sind:
Dateispeicherung und -export
Sie können das Ereignis OnRecording verwenden, um den vollständigen Pfad der Aufnahmedatei zu erhalten:
frameRecorder.OnRecording.AddListener((file) =>
{
Debug.Log($"Aufnahme gestartet: {file}");
});
Standardmäßig werden Aufnahmedateien im persistenten Datenpfad der Anwendung gespeichert. Dieser Pfad kann über Application.persistentDataPath abgerufen werden.
Sie können den Speicherpfad der Aufnahmedatei über FrameRecorder.Configuration.FilePath ändern. Dieser Pfad muss vor dem Start der Aufnahme festgelegt werden und erfordert, dass AutoFilePath deaktiviert ist. Das Verzeichnis muss vorab erstellt werden.
Wichtig
Stellen Sie sicher, dass das Speicherverzeichnis für die Aufnahmedateien existiert und die Anwendung Schreibrechte darauf hat, da die Aufnahme sonst beim Start fehlschlägt.
Der folgende Code zeigt beispielsweise, wie Aufnahmedateien in einem benutzerdefinierten Verzeichnis gespeichert werden, wobei der Dateiname basierend auf dem Typ der FrameSource der Session und der aktuellen Zeit generiert wird:
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;
Alternativ können Sie im Editor AR Session (EasyAR) auswählen, im Inspector-Fenster das Häkchen bei Auto File Path für Frame Recorder entfernen und dann konfigurieren:

Tipp
Über FrameRecorder.RecordingConfiguration.FilePath können Sie das Speicherverzeichnis und den Dateinamen (ohne Erweiterung) ändern. Die Dateierweiterung wird automatisch basierend auf dem Aufnahmeformat hinzugefügt.
Wenn Dateien im persistenten Datenpfad der Anwendung oder einem anderen privaten Anwendungsverzeichnis gespeichert sind, können Sie sie wie folgt auf einen Computer exportieren:
- Auf Android-Geräten können Sie nach dem USB-Anschluss an einen Computer die Datei mit
adb pulloder anderen Methoden exportieren. Dateien befinden sich normalerweise unter/sdcard/Android/data/<App-Paketname>/files. - Auf iOS-Geräten können Sie Dateien über das Gerätefenster von Xcode oder über iTunes/Finder-Dateifreigabe auf das private Anwendungsverzeichnis zugreifen und exportieren.
- Exportieren Sie die Datei programmgesteuert in ein öffentliches Verzeichnis, z.B. den Download-Ordner unter Android oder das Fotoalbum unter iOS.
Anmerkung
Für iOS-Anwendungen, die den Zugriff auf private Verzeichnisse über iTunes/Finder-Dateifreigabe ermöglichen sollen, muss vor dem Build im Xcode-Projekt in der Info.plist der Schlüssel UIFileSharingEnabled hinzugefügt und auf YES gesetzt werden:

Der angezeigte Text nach dem Hinzufügen kann vom hinzugefügten String abweichen – das ist normal.
Aufnahmeformat ändern
Ändern Sie das Aufnahmeformat über FrameRecorder.Configuration.Format. Dies muss vor dem Start der Aufnahme festgelegt werden.
Der folgende Code zeigt beispielsweise, wie das Aufnahmeformat auf H264 festgelegt wird:
frameRecorder.Configuration.Format = FrameRecorder.InternalFormat.H264;
Alternativ können Sie im Editor AR Session (EasyAR) auswählen und im Inspector-Fenster Format ändern:

Anmerkung
H264 ist auf einigen Geräten (z.B. Windows) nicht verfügbar. Generell wird Auto empfohlen, da es automatisch ein passendes Format basierend auf dem Gerät auswählt.
Anmerkung
Auf XREAL-Geräten können mit Obsolete aufgezeichnete Daten nicht für Simulationsläufe verwendet werden. Sie dienen ausschließlich der Problemberichterstattung.
Sie können RecordingFormat verwenden, um das derzeitige Aufnahmeformat zu überprüfen.
Automatische Aufnahme beim Session-Start
Setzen Sie AutoStart auf true, bevor die Session gestartet wird, um die Aufnahme beim Session-Start zu aktivieren, z.B.:
frameRecorder.AutoStart = true;
Alternativ können Sie im Editor AR Session (EasyAR) auswählen und im Inspector-Fenster das Häkchen bei Auto Start für Frame Recorder setzen:

Anmerkung
Änderungen an FrameRecorder.enabled im Editor sind wirkungslos.
Für Mega verwendbare Daten
Bei der Verwendung von Mega gibt es besondere Anforderungen an den Inhalt von EIF- und zugehörigen Dateien. In älteren Versionen des Unity-Plugins waren diese Funktionen nicht integriert, und mit diesen Versionen aufgezeichnete Daten können nicht für Mega verwendet werden.
Folgende Aufnahmen können für Mega verwendet werden:
- Mit Unity-Plugin Version 4000 oder höher aufgezeichnete Daten
- Mit dem Mega Toolbox aufgezeichnete Daten
- Wenn Daten im Obsolete-Format aufgezeichnet wurden (z.B. Datei
x.eif), muss in demselben Verzeichnis die Dateix.eif.jsonvorhanden sein
Folgende Aufnahmen können NICHT für Mega verwendet werden:
- Mit Unity-Plugin Version 4.6 oder niedriger aufgezeichnete Daten
- Mit nativen EasyAR Sense aufgezeichnete Daten, die nicht die gleichen zusätzlichen Inhalte wie das Unity-Plugin enthalten
Zusätzlich: Obwohl Mega ohne Bewegungsverfolgung arbeiten kann, ist die Leistung unterschiedlich. Es wird empfohlen, die Bewegungsverfolgungsfunktion bei der Aufnahme von EIF-Dateien zu aktivieren, um sicherzustellen, dass die Wiedergabeleistung den meisten Anwendungsfällen entspricht.
Nächste Schritte
- Versuchen Sie, EIF-Dateien für Simulationsläufe zu verwenden
- Versuchen Sie, das Session-Validierungstool zu verwenden