Benutzerdefinierte Daten bei der Aufzeichnung auf Android-Geräten hinzufügen

Die Aufzeichnung & Mit der Wiedergabe-API kannst du eine Sitzung aufzeichnen und anstelle eines Echtzeit-Kamerafeeds verwenden. Diese Aufnahmen enthalten jedoch nur Video- und Sensordaten. Sie können einer Sitzungsaufzeichnung auch benutzerdefinierte Daten hinzufügen, die während der Wiedergabe so zurückgegeben werden, als wären sie Teil eines Kamerabilds.

ARCore fügt nicht automatisch benutzerdefinierte Daten in Aufzeichnungen ein. Stattdessen können Sie einem ARCore-Frame während der Aufnahme benutzerdefinierte Daten hinzufügen und diese Daten während der Wiedergabe aus dem Frame abrufen. Sie müssen die App so programmieren, dass der Nutzer bei der Wiedergabe der Sitzung die erwarteten Daten zurückgibt.

Anwendungsfälle für benutzerdefinierte Daten

Wenn du deinen Aufnahmen benutzerdefinierte Daten hinzufügst, stehen dir noch mehr Möglichkeiten für deine AR-Apps zur Verfügung. Im Folgenden sind einige spezifische Anwendungsfälle aufgeführt.

AR auch unterwegs nutzen

Bisher konnten Nutzer AR-Funktionen nur am richtigen Ort und zur richtigen Zeit nutzen. Wenn sie eine AR-Lampe im Wohnzimmer platzieren wollten, mussten sie sich vor Ort aufhalten, um zu sehen, wie die Lampe dort aussehen könnte. Mit benutzerdefinierten Tracks können sie ihr Wohnzimmer einmal aufnehmen und jederzeit virtuelle Möbel hinzufügen.

AR-Erlebnisse gemeinsam erstellen

Wenn keine Livesitzung erforderlich ist, haben Nutzer viel mehr Möglichkeiten, AR-Inhalte zu bearbeiten. So können sie jederzeit und überall einzigartige AR-Inhalte erstellen und darauf zugreifen. Sie können beispielsweise eine bestimmte Umgebung aufnehmen, Augmented-Reality-Effekte hinzufügen und sie mit Freunden teilen.

Vorbereitung

Machen Sie sich mit den grundlegenden AR-Konzepten vertraut. und Konfigurieren einer ARCore-Sitzung beschrieben, bevor du fortfährst.

Mit benutzerdefinierten Daten aufzeichnen

Eine Sitzungsaufzeichnung mit benutzerdefinierten Daten erstellen.

Aufzeichnung mit benutzerdefinierten Daten initialisieren

Führen Sie die folgenden Schritte aus, um eine Aufzeichnung mit benutzerdefinierten Daten zu initialisieren. Weitere Informationen dazu, wie Sie eine Aufzeichnung starten, stoppen und überprüfen, finden Sie im Hilfeartikel AR-Sitzungen aufzeichnen und wiedergeben.

  1. Sie erhalten ein RecordingConfig.
  2. Erstellen Sie eine neue Track mit einer benutzerdefinierten UUID. Alle benutzerdefinierten Daten werden hier gespeichert.
  3. Fügen Sie den Track dem RecordingConfig hinzu, den Sie während der Sitzungskonfiguration erstellt haben.

Java

// Initialize a new track with a custom UUID.
// Make sure to save the UUID because it is the ID that you will use
// to get your data back during playback.
UUID trackUUID = UUID.fromString("de5ec7a4-09ec-4c48-b2c3-a98b66e71893"); // from UUID generator
Track track = new Track(session).setId(trackUUID);

// Add the Track to the recordingConfig.
// recordingConfig must already be configured.
recordingConfig.addTrack(track);

Kotlin

// Initialize a new track with a custom UUID.
// Make sure to save the UUID because it is the ID that you will use
// to get your data back during playback.
val trackUUID = UUID.fromString("de5ec7a4-09ec-4c48-b2c3-a98b66e71893") // from UUID generator
val track = Track(session).setId(trackUUID)

// Add the Track to the recordingConfig.
// recordingConfig must already be configured.
recordingConfig.addTrack(track)

Alle neuen Tracks werden als separate Aufzeichnungen behandelt, wobei jeder aufgezeichnete Track eine eigene UUID hat.

Optional: Track mit zusätzlichen Daten konfigurieren

Falls Sie ihn später wiedererkennen möchten, können Sie einen Track mit zusätzlichen Daten konfigurieren, die die Sitzungsaufzeichnung beschreiben. Sie können beispielsweise einen Track taggen, indem Sie eine Notiz hinzufügen, die den Ort und die Uhrzeit beschreibt, zu der Sie die Sitzung aufgezeichnet haben: „Diese Sitzung wurde am Nachmittag im Einkaufszentrum aufgezeichnet.“

Java

// Set additional data on this track.
// For example, describe where you recorded the session.
byte[] customTrackData = "airport".getBytes(StandardCharsets.UTF_8);
track.setMetadata(ByteBuffer.wrap(customTrackData));

Kotlin

// Set additional data on this track.
// For example, describe where you recorded the session.
val customTrackData: ByteArray = "airport".toByteArray()
track.setMetadata(ByteBuffer.wrap(customTrackData))

Optional: Track mit einem MIME-Typ konfigurieren

Wenn Ihre App mit externen Tools kompatibel sein muss, können Sie einen Track mit einem MIME-Typ konfigurieren, der den Typ der im Track aufgezeichneten Daten beschreibt. Wenn Sie keinen Typ angeben, werden die Daten als application/text kategorisiert. ARCore ignoriert den MIME-Typ beim Lesen von Daten.

Java

// Set a MIME type for compatibility with external tools.
track.setMimeType("text/csv");

Kotlin

// Set a MIME type for compatibility with external tools.
track.setMimeType("text/csv")

Benutzerdefinierte Daten-Tracks aufzeichnen

Alle benutzerdefinierten Trackdaten werden in Frames aufgezeichnet. Bei AR-Sitzungen wird mit session.update() ein Frame abgerufen. Der Zeitpunkt, an dem Sie Daten in einem Frame aufzeichnen, ist der Zeitpunkt, zu dem die Daten während der Wiedergabe zurückgegeben werden. Wenn Sie beispielsweise recordTrackData() mit dem Wert „A“ bei 00:07:02 aufrufen, wird an der 00:07:02-Markierung ein „A“ zurückgegeben, wenn der Titel abgespielt wird.

Wenn Sie einen benutzerdefinierten Daten-Track aufzeichnen möchten, wandeln Sie die Daten in einen ByteBuffer um und rufen Sie recordTrackData() auf.

Java

// Place an AR lamp in a room.
if (placeLampButtonWasPressed) {
  Lamp lampProduct = Lamp.FLOOR; // a floor lamp
  // Convert the lamp data into a byte array.
  ByteBuffer lampData = ByteBuffer.wrap(new byte[] {(byte) lampProduct.ordinal()});
  frame.recordTrackData(trackUUID, lampData);
}

Kotlin

// Place an AR lamp in a room.
if (placeLampButtonWasPressed) {
  val lampProduct = Lamp.FLOOR // a floor lamp
  // Convert the lamp data into a byte array.
  val lampData = ByteBuffer.wrap(byteArrayOf(lampProduct.ordinal.toByte()))
  frame.recordTrackData(trackUUID, lampData)
}

Benutzerdefinierte Daten-Tracks wiedergeben

Extrahiert während der Wiedergabe benutzerdefinierte Daten aus einer Sitzungsaufzeichnung.

Wiedergabe initialisieren

Das Initialisieren einer Wiedergabe mit benutzerdefinierten Daten entspricht dem Initialisieren der Wiedergabe einer regulären Aufzeichnung.

Benutzerdefinierte Daten zurückgeben

Rufen Sie getUpdatedTrackData() auf, um die benutzerdefinierten Daten abzurufen, die in einem Frame aufgezeichnet wurden. Es ist möglich, mehrere Trackdaten aus demselben Frame abzurufen. Wenn Sie beispielsweise recordTrackData() während der Aufnahme zweimal in demselben Frame aufgerufen haben, erhalten Sie während der Wiedergabe zwei Instanzen von TrackData.

Java

// Fetch the data recorded on a select frame and place it in a container object.
Collection<TrackData> trackDataList = frame.getUpdatedTrackData(trackUUID);

Kotlin

// Fetch the data recorded on a select frame and place it in a container object.
val trackDataList: Collection<TrackData> = frame.getUpdatedTrackData(trackUUID)

Sobald sich das TrackData in einem Containerobjekt befindet, extrahieren Sie die Bytes der benutzerdefinierten Daten.

Java

// Extract the bytes of custom data from the list of track data.
for (TrackData trackData : trackDataList) {
  ByteBuffer bytes = trackData.getData();
  Lamp lamp = Lamp.values()[bytes.get()]; // this is the lamp!
}

Kotlin

// Extract the bytes of custom data from the list of track data.
for (trackData in trackDataList) {
  val bytes = trackData.data
  val lamp = Lamp.values()[bytes.get().toInt()] // this is the lamp!
}

Weiteres Vorgehen