Aggiungi dati personalizzati durante la registrazione su Android NDK

L'API Recording & Playback consente di registrare una sessione e utilizzarla al posto del feed della videocamera in tempo reale. Tuttavia, queste registrazioni contengono solo dati video e dei sensori. Puoi anche aggiungere dati personalizzati alla registrazione di una sessione e farti restituire i dati durante la riproduzione, come se fossero parte dell'immagine di una videocamera.

ARCore non include automaticamente dati personalizzati nelle registrazioni. Consente invece di aggiungere dati personalizzati a un fotogramma ARCore durante la registrazione e recuperare gli stessi dati dal fotogramma durante la riproduzione. È tua responsabilità programmare l'app in modo che l'utente possa recuperare i dati che si aspetta quando riproduce la sessione.

Casi d'uso per i dati personalizzati

L'aggiunta di dati personalizzati alle registrazioni amplia le possibilità per le tue app AR. Di seguito sono riportati alcuni casi d'uso specifici.

Usa l'AR ovunque ti trovi

In passato, gli utenti potevano accedere alle esperienze AR solo nel posto giusto e al momento giusto. Se volevano posizionare una lampada AR nel salotto, dovevano stare fisicamente nel luogo per vedere come potrebbe apparire la lampada lì. Grazie alle tracce personalizzate, possono registrare una volta sola in salotto e aggiungere mobili virtuali alla scena ogni volta che ne hanno voglia.

Crea esperienze AR in collaborazione

Senza un requisito di sessione dal vivo, gli utenti hanno molte più opzioni per la modifica AR, che consentono loro di creare e accedere a contenuti AR unici in qualsiasi luogo e momento. Ad esempio, possono registrare un determinato ambiente, aggiungere effetti di realtà aumentata e condividerli con gli amici.

Prerequisiti

Assicurati di aver compreso i concetti fondamentali di AR e di configurare una sessione ARCore prima di procedere.

Registra con dati personalizzati

Crea una registrazione della sessione con dati personalizzati.

Inizializzare una registrazione con dati personalizzati

Segui questi passaggi per inizializzare una registrazione con dati personalizzati. Per avviare, interrompere e controllare una sessione di registrazione, consulta Registrare e riprodurre una sessione AR.

  1. Ottieni un ArRecordingConfig.
  2. Crea una nuova ArTrack con un UUID personalizzato. Tutti i dati personalizzati verranno salvati qui.
  3. Aggiungi ArTrack alla ArRecordingConfig che hai creato durante la configurazione della sessione.
// 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);

Tutte le nuove tracce vengono trattate come registrazioni separate e ciascuna traccia registrata occupa il proprio UUID.

(Facoltativo) Configurare il canale con dati aggiuntivi

Se vuoi identificare il canale in un secondo momento, puoi configurare un canale con dati aggiuntivi che descrivano la registrazione della sessione. Ad esempio, puoi "taggare" un percorso aggiungendo una nota che descriva il luogo e l'ora in cui hai registrato la sessione: "Questa sessione è stata registrata al centro commerciale di pomeriggio".

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

(Facoltativo) Configurare la traccia con un tipo MIME

Se la tua app deve essere compatibile con strumenti esterni, puoi configurare un canale con un tipo MIME che descriva il tipo di dati registrati nel canale. Se non specifichi un tipo, i dati verranno classificati come application/text. ARCore ignora il tipo MIME durante la lettura dei dati.

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

Registra tracce di dati personalizzate

Tutti i dati dei percorsi personalizzati vengono registrati nei ArFrame. Le sessioni AR utilizzano ArSession_update() per ottenere un frame. Il momento in cui registri i dati su un frame corrisponde al momento in cui i dati verranno restituiti durante la riproduzione. Ad esempio, se chiami ArFrame_recordTrackData() con il valore "A" a 00:07:02, riceverai di nuovo "A" al punto 00:07:02 quando la traccia viene riprodotta.

Per registrare una traccia dati personalizzata, chiama ArFrame_recordTrackData().

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

Riprodurre le tracce di dati personalizzate

Estrai dati personalizzati dalla registrazione di una sessione durante la riproduzione.

Inizializzare una riproduzione

Iniziare una riproduzione con dati personalizzati equivale ad iniziare una riproduzione di una normale registrazione di una sessione.

Restituisci dati personalizzati

Chiama il numero ArFrame_getUpdatedTrackData() per recuperare i dati personalizzati registrati su un ArFrame. È possibile recuperare più dati di tracciamento dallo stesso frame. Ad esempio, se durante la registrazione hai chiamato ArFrame_recordTrackData() due volte sullo stesso fotogramma, riceverai due istanze di ArTrackData durante la riproduzione.

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

Quando ArTrackData si trova in un oggetto container, estrai i byte dei dati personalizzati.

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

Passaggi successivi