Benutzerdefinierte Daten während der Aufnahme auf einem Android-NDK 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. Fordern Sie ein ArRecordingConfig an.
  2. Erstellen Sie einen neuen 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 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.“

// 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: 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.

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

Benutzerdefinierte Daten-Tracks aufzeichnen

Alle benutzerdefinierten Titeldaten werden in ArFrames aufgezeichnet. Bei AR-Sitzungen wird ArSession_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 ArFrame_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.

Rufen Sie ArFrame_recordTrackData() auf, um einen benutzerdefinierten Datentrack aufzuzeichnen.

// 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

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 ArFrame_getUpdatedTrackData() auf, um die benutzerdefinierten Daten abzurufen, die auf einem ArFrame aufgezeichnet wurden. Es ist möglich, aus einem Frame mehrere Trackdaten abzurufen. Wenn du beispielsweise während einer Aufnahme ArFrame_recordTrackData() zweimal in demselben Frame aufgerufen hast, wird ArTrackData während der Wiedergabe zweimal zurückgegeben.

// 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 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);

Nächste Schritte