Aggiungere dati personalizzati durante la registrazione su Android

Le funzionalità di registrazione e L'API Riproduzione ti consente di registrare una sessione e di utilizzarla al posto del feed videocamera in tempo reale. Tuttavia, queste registrazioni contengono solo dati video e dei sensori. È inoltre possibile aggiungere dati personalizzati alla registrazione di una sessione in modo che vengano restituiti durante la riproduzione, come se facessero parte dell'immagine di una videocamera.

ARCore non include automaticamente i dati personalizzati nelle registrazioni. Consente invece di aggiungere dati personalizzati a un frame ARCore durante la registrazione e di recuperare gli stessi dati dal frame durante la riproduzione. Spetta a te programmare l'app in modo che l'utente riceva 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 loro salotto, dovevano fisicamente trovarsi nella posizione per vedere che aspetto avrebbe la lampada lì. Grazie alle tracce personalizzate, possono registrare una volta sola nel loro salotto e aggiungere mobili virtuali alla scena in qualsiasi momento.

Creare esperienze AR insieme

Senza il requisito di una 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 comprendere i concetti fondamentali della realtà aumentata e su come configurare una sessione ARCore prima di procedere.

Registra con dati personalizzati

Creare 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 RecordingConfig.
  2. Crea una nuova Track con un UUID personalizzato. Tutti i dati personalizzati verranno salvati qui.
  3. Aggiungi il Track al RecordingConfig che hai creato durante la configurazione della sessione.

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)

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

(Facoltativo) Configurare la traccia con dati aggiuntivi

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

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

(Facoltativo) Configura il canale 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.

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")

Registra tracce di dati personalizzate

Tutti i dati dei canali personalizzati vengono registrati su Frame. Le sessioni AR utilizzano session.update() per acquisire un frame. L'orario in cui registri i dati in un frame corrisponde all'orario in cui i dati verranno restituiti durante la riproduzione. Ad esempio, se chiami recordTrackData() con il valore "A" per 00:07:02, vedrai "A" in corrispondenza del contrassegno 00:07:02 quando la traccia viene riprodotta.

Per registrare un canale di dati personalizzato, converti i dati in un ByteBuffer e chiama recordTrackData().

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

Riprodurre tracce di dati personalizzate

Consente di estrarre dati personalizzati dalla registrazione di una sessione durante la riproduzione.

Inizializzare una riproduzione

L'inizializzazione di una riproduzione con dati personalizzati equivale a iniziare la riproduzione di una registrazione di una sessione standard.

Restituisci dati personalizzati

Chiama il numero getUpdatedTrackData() per recuperare i dati personalizzati registrati su un frame. È possibile recuperare più dati traccia dallo stesso frame. Ad esempio, se hai chiamato recordTrackData() due volte nello stesso frame durante la registrazione, riceverai due occorrenze di TrackData durante la riproduzione.

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)

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

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

Passaggi successivi