Ajouter des données personnalisées pendant l'enregistrement sur Android

L'API Recording & Playback vous permet d'enregistrer une session et de l'utiliser à la place du flux de caméra en temps réel. Toutefois, ces enregistrements ne contiennent que des données vidéo et des données des capteurs. Vous pouvez également ajouter des données personnalisées à l'enregistrement d'une session et obtenir le renvoi de ces données lors de la lecture, comme si elles faisaient partie d'une image de caméra.

ARCore n'inclut pas automatiquement de données personnalisées dans les enregistrements. Cela vous permet plutôt d'ajouter des données personnalisées à une frame ARCore pendant l'enregistrement et de récupérer ces mêmes données depuis la frame pendant la lecture. C'est à vous de programmer l'application de sorte que l'utilisateur récupère les données attendues lorsqu'il reprend la session.

Cas d'utilisation des données personnalisées

Ajouter des données personnalisées aux enregistrements élargit les possibilités de vos applications de RA. Voici quelques cas d'utilisation spécifiques.

Utilisez la RA en déplacement

Auparavant, les utilisateurs ne pouvaient accéder aux expériences de RA qu'au bon endroit et au bon moment. S'il voulait installer une lampe en RA dans son salon, il devait se tenir physiquement à cet endroit pour voir à quoi pourrait ressembler la lampe. Grâce aux pistes personnalisées, ils peuvent enregistrer leur salon une fois et ajouter des meubles virtuels à la scène dès qu'ils en ont envie.

Cocréer des expériences de RA

Si aucune session en direct n'est requise, les utilisateurs disposent de nombreuses autres options d'édition en RA, ce qui leur permet de créer et d'accéder à un contenu en RA unique à tout moment et à tout moment. Par exemple, ils peuvent enregistrer un environnement donné, ajouter des effets de réalité augmentée et les partager avec des amis.

Conditions préalables

Assurez-vous de bien comprendre les concepts fondamentaux de la RA et de configurer une session ARCore avant de continuer.

Enregistrer avec des données personnalisées

Créez un enregistrement de session avec des données personnalisées.

Initialiser un enregistrement avec des données personnalisées

Pour initialiser un enregistrement avec des données personnalisées, procédez comme suit : Pour démarrer, arrêter et vérifier une session d'enregistrement, consultez Enregistrer et lire une session de RA.

  1. Obtenez un RecordingConfig.
  2. Créez un Track avec un UUID personnalisé. Toutes les données personnalisées seront enregistrées ici.
  3. Ajoutez le Track au RecordingConfig que vous avez créé lors de la configuration de la session.

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)

Toutes les nouvelles pistes sont traitées comme des enregistrements distincts, chaque piste enregistrée occupant son propre UUID.

Facultatif: configurer le canal avec des données supplémentaires

Si vous souhaitez l'identifier plus tard, vous pouvez configurer un canal avec des données supplémentaires décrivant l'enregistrement de la session. Par exemple, vous pouvez ajouter un tag à un titre en ajoutant une note qui décrit le lieu et l'heure d'enregistrement de la session : "Cette session a été enregistrée dans un centre commercial l'après-midi".

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

Facultatif: configurer la piste avec un type MIME

Si votre application doit être compatible avec des outils externes, vous pouvez configurer une piste avec un type MIME décrivant le type de données enregistrées dans la piste. Si vous ne spécifiez pas de type, les données seront classées en tant que application/text. ARCore ignore le type MIME lors de la lecture des données.

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

Enregistrer des pistes de données personnalisées

Toutes les données des parcours personnalisés sont enregistrées sur des Frame. Les sessions de RA utilisent session.update() pour obtenir un frame. L'heure à laquelle vous enregistrez des données sur une image correspond au moment auquel les données seront renvoyées lors de la lecture. Par exemple, si vous appelez recordTrackData() avec la valeur "A" à 00:07:02, vous obtenez "A" au niveau de la marque 00:07:02 lors de la lecture du titre.

Pour enregistrer une piste de données personnalisée, convertissez les données en ByteBuffer, puis appelez 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)
}

Lire des pistes de données personnalisées

Extrayez des données personnalisées d'un enregistrement de session pendant la lecture.

Initialiser une lecture

Initialiser une lecture avec des données personnalisées revient à initialiser la lecture d'un enregistrement de session standard.

Renvoyer des données personnalisées

Appelez getUpdatedTrackData() pour récupérer les données personnalisées enregistrées sur un frame. Il est possible de récupérer plusieurs données de piste à partir de la même trame. Par exemple, si vous avez appelé recordTrackData() deux fois sur la même image pendant l'enregistrement, vous recevrez deux instances de TrackData lors de la lecture.

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)

Une fois que TrackData se trouve dans un objet de conteneur, extrayez les octets des données personnalisées.

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

Et ensuite ?