Ajouter des données personnalisées lors de l'enregistrement sur le NDK Android

Enregistrement et L'API Playback vous permet d'enregistrer une session et de l'utiliser à la place d'un 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 à un enregistrement de session et les récupérer pendant 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. Il vous permet plutôt d'ajouter des données personnalisées à une image ARCore pendant l'enregistrement et de récupérer ces mêmes données à partir de l'image lors de la lecture. Il vous appartient de programmer l'application de sorte que l'utilisateur récupère les données qu'il attend lorsqu'il lit sa session.

Cas d'utilisation des données personnalisées

L'ajout de données personnalisées aux enregistrements étend 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'ils souhaitaient installer une lampe en réalité augmentée dans leur salon, ils devaient se tenir debout à cet endroit pour voir à quoi pourrait ressembler la lampe. Grâce aux titres personnalisés, ils peuvent s'enregistrer une fois dans leur salon et ajouter du mobilier virtuel à la scène quand ils en ont envie.

Créez des expériences de RA à plusieurs

En l'absence de session en direct, les utilisateurs disposent de beaucoup plus d'options pour modifier la RA, ce qui leur permet de créer du contenu RA unique et d'y accéder n'importe où et n'importe quand. Par exemple, ils peuvent enregistrer un environnement donné, ajouter des effets de réalité augmentée et les partager avec leurs amis.

Prérequis

Assurez-vous de bien maîtriser les concepts fondamentaux de la RA. et comment 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

Suivez ces étapes pour initialiser un enregistrement avec des données personnalisées. Pour démarrer, arrêter et vérifier une session d'enregistrement, consultez Enregistrer et lire une session de RA.

  1. Obtenez un ArRecordingConfig.
  2. Créez un ArTrack avec un UUID personnalisé. Toutes les données personnalisées seront enregistrées ici.
  3. Ajoutez le ArTrack au ArRecordingConfig que vous avez créé lors de la configuration de la session.
// 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);

Tous les nouveaux titres sont traités comme des enregistrements distincts, chacun d'entre eux occupant son propre UUID.

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

Au cas où vous souhaiteriez l'identifier ultérieurement, vous pouvez configurer une piste avec des données supplémentaires décrivant l'enregistrement de la session. Par exemple, vous pouvez "taguer" un titre en ajoutant une remarque indiquant le lieu et l'heure auxquels vous avez enregistré la session : "Cette session a été enregistrée dans un centre commercial l'après-midi".

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

Facultatif: Configurer le suivi avec un type MIME

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

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

Enregistrer des pistes de données personnalisées

Toutes les données de suivi personnalisé sont enregistrées dans des ArFrame. Les sessions de RA utilisent ArSession_update() pour obtenir un frame. L'heure à laquelle vous enregistrez des données sur une image est la même heure que celle à laquelle les données sont renvoyées pendant la lecture. Par exemple, si vous appelez ArFrame_recordTrackData() avec la valeur "A" à 00:07:02, vous recevez "A" au marque 00:07:02 lors de la lecture du titre.

Pour enregistrer une piste de données personnalisée, appelez 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);
}

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 ArFrame_getUpdatedTrackData() pour récupérer les données personnalisées enregistrées sur un ArFrame. Il est possible de récupérer des données de plusieurs pistes à partir d'une même trame. Par exemple, si vous avez appelé ArFrame_recordTrackData() deux fois sur la même image pendant l'enregistrement, vous obtenez deux instances de ArTrackData lors de la lecture.

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

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

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

Étapes suivantes