Benutzerdefinierte Daten während der Aufnahme auf einem Android-NDK 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 Aufzeichnungen 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 ArRecordingConfig.
  2. Erstellen Sie eine neue ArTrack mit einer benutzerdefinierten UUID. Alle benutzerdefinierten Daten werden hier gespeichert.
  3. Fügen Sie den ArTrack dem ArRecordingConfig hinzu, den Sie während der Sitzungskonfiguration erstellt haben.
// 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.
ArTrack* track = NULL;
ArTrack_create(ar_session, &track);
// String from UUID generator: de5ec7a4-09ec-4c48-b2c3-a98b66e71893
uint8_t uuid_byte_array[16] = {0xde, 0x5e, 0xc7, 0xa4, 0x09, 0xec,
                               0x4c, 0x48, 0xb2, 0xc3, 0xa9, 0x8b,
                               0x66, 0xe7, 0x18, 0x93};
ArTrack_setId(ar_session, track, uuid_byte_array);

// Add the ArTrack to the recording_config.
// recording_config must already be configured.
ArRecordingConfig_addTrack(ar_session, recording_config, track);
ArTrack_destroy(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.“

// Set additional data on this track.
// For example, describe where you recorded the session.
uint8_t metadata_size = 4;
uint8_t metadata[5] = "HOME";
ArTrack_setMetadata(ar_session, track, metadata, metadata_size);

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.

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

Benutzerdefinierte Daten-Tracks aufzeichnen

Alle benutzerdefinierten Trackdaten werden in ArFrames aufgezeichnet. Bei AR-Sitzungen wird mit ArSession_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 ArFrame_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, rufen Sie ArFrame_recordTrackData() auf.

// Place an AR lamp in a room.
if (place_lamp_button_was_pressed) {
  uint8_t lamp_data[1] = {lamp_id};
  ArFrame_recordTrackData(ar_session, frame, uuid_byte_array, lamp_data,
                          /*payload_size=*/1);
}

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 einer Wiedergabe einer regulären Aufzeichnung.

Benutzerdefinierte Daten zurückgeben

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

// Create the container to hold the track data retrieved from the frame.
ArTrackDataList* fetched_track_data_list;
ArTrackDataList_create(ar_session, &fetched_track_data_list);

// Fetch the track data from the frame into the created container.
ArFrame_getUpdatedTrackData(ar_session, frame, uuid_byte_array,
                            fetched_track_data_list);

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

// Fetch the size of the track data list.
int32_t fetched_track_data_list_size;
ArTrackDataList_getSize(ar_session, fetched_track_data_list,
                        &fetched_track_data_list_size);

// Iterate through the list.
for (int i = 0; i < fetched_track_data_list_size; i++) {
  ArTrackData* fetched_track_data;
  ArTrackDataList_acquireItem(ar_session, fetched_track_data_list, i,
                              &fetched_track_data);
  // Process "fetched_track_data->sample" as desired
  ArTrackData_release(fetched_track_data);
}
ArTrackDataList_destroy(fetched_track_data_list);

Weiteres Vorgehen