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

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

ARCore schließt benutzerdefinierte Daten nicht automatisch in Aufzeichnungen ein. Vielmehr können Sie einem ARCore-Frame während der Aufzeichnung 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 erhält.

Anwendungsfälle für benutzerdefinierte Daten

Wenn du benutzerdefinierte Daten zu Aufnahmen 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 unterwegs verwenden

Früher konnten Nutzer nur am richtigen Ort und zur richtigen Zeit auf AR-Erlebnisse zugreifen. 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.

Gemeinsam mit anderen AR-Erlebnisse schaffen

Ohne Livesitzung haben Nutzer viel mehr Möglichkeiten zur Bearbeitung von AR-Inhalten. 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.

Voraussetzungen

Machen Sie sich mit den grundlegenden AR-Konzepten und zur Konfiguration einer ARCore-Sitzung vertraut, bevor Sie fortfahren.

Mit benutzerdefinierten Daten aufzeichnen

Sie können eine Sitzungsaufzeichnung mit benutzerdefinierten Daten erstellen.

Aufzeichnung mit benutzerdefinierten Daten initialisieren

So initialisieren Sie eine Aufzeichnung mit benutzerdefinierten Daten: Weitere Informationen zum Starten, Stoppen und Prüfen einer Aufzeichnung finden Sie unter AR-Sitzungen aufzeichnen und abspielen.

  1. Sie benötigen ein RecordingConfig.
  2. Erstellen Sie einen neuen 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 belegt.

Optional: Track mit zusätzlichen Daten konfigurieren

Falls Sie sie später noch einmal identifizieren 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 den Ort und die Zeit hinzufügen, zu der Sie die Sitzung aufgezeichnet haben: „Diese Sitzung wurde am Nachmittag im Einkaufszentrum aufgenommen.“

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: Konfigurieren Sie den Track mit einem MIME-Typ

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 Titeldaten werden in Frames aufgezeichnet. Bei AR-Sitzungen wird session.update() verwendet, um einen Frame abzurufen. Die Zeit, zu der Sie Daten in einem Frame aufzeichnen, ist der Zeitpunkt, zu dem die Daten während der Wiedergabe zurückgegeben werden. Wenn du beispielsweise recordTrackData() mit dem Wert „A“ bei 00:07:02 aufrufst, erhältst du an der 00:07:02-Markierung „A“, wenn der Titel abgespielt wird.

Um einen benutzerdefinierten Datentrack aufzuzeichnen, wandeln Sie die Daten in ein ByteBuffer-Objekt 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

Sie können während der Wiedergabe benutzerdefinierte Daten aus einer Sitzungsaufzeichnung extrahieren.

Wiedergabe initialisieren

Das Initialisieren einer Wiedergabe mit benutzerdefinierten Daten ist identisch mit dem Initialisieren der Wiedergabe einer regulären Sitzungsaufzeichnung.

Benutzerdefinierte Daten zurückgeben

Rufen Sie getUpdatedTrackData() auf, um die benutzerdefinierten Daten abzurufen, die in einem Frame aufgezeichnet wurden. Es ist möglich, aus einem Frame mehrere Trackdaten abzurufen. Wenn du beispielsweise während einer Aufnahme recordTrackData() zweimal in demselben Frame aufgerufen hast, wird TrackData während der Wiedergabe zweimal zurückgegeben.

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

Nächste Schritte