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 dieseselben 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 konkrete 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

Da keine Live-Sitzung mehr erforderlich ist, haben Nutzer viele weitere Möglichkeiten zur AR-Bearbeitung. 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. Informationen zum Starten, Beenden und Prüfen einer Aufzeichnungssitzung finden Sie unter 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

Wenn Sie die Sitzung später 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 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: Titel 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 Datentyp beschreibt, der im Track aufgezeichnet wird. 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 Daten zu Tracks werden auf Frames aufgezeichnet. Bei AR-Sitzungen wird session.update() verwendet, um einen Frame abzurufen. 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 du beispielsweise recordTrackData() mit dem Wert „A“ bei 00:07:02 aufrufst, wird bei der Wiedergabe des Titels an der Markierung 00:07:02 „A“ zurückgegeben.

Wenn Sie einen benutzerdefinierten Daten-Track aufzeichnen möchten, konvertieren Sie die Daten in eine ByteBuffer 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