Table of Contents

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

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:

  • Wenn das Aufnahmeformat H264 ist, kann die EIF-Datei nicht zu einem bestimmten Zeitpunkt gesprungen (seek) und muss von Anfang abgespielt werden.
  • Wenn das Aufnahmeformat Obsolete ist, kann die EIF-Datei nicht verwendet werden.

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:

alt text

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.

  • Bei Aufnahmeformat H264 ist die Erweiterung .mkveif
  • Bei Aufnahmeformat Obsolete ist die Erweiterung .eif

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

alt text

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:

alt text

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.

  • Für Simulationsläufe sollten Daten im H264-Format aufgezeichnet werden.
  • Bei Problemberichten sollten Daten im Obsolete-Format aufgezeichnet werden.

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:

alt text

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 Datei x.eif.json vorhanden 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