Agrega datos personalizados mientras grabas en Android

La API de Recording & Playback te permite grabar una sesión y usarla en lugar del feed de la cámara en tiempo real. Sin embargo, esos registros solo contienen datos de video y de sensores. También puedes agregar datos personalizados a una grabación de sesión y hacer que se muestren los datos durante la reproducción, como si fueran parte de una imagen de la cámara.

ARCore no incluye automáticamente ningún dato personalizado en las grabaciones. En cambio, te permite agregar datos personalizados a un fotograma de ARCore durante la grabación y recuperar esos datos del fotograma durante la reproducción. Depende de ti programar la app para que el usuario recupere los datos que espera cuando reproduzca su sesión.

Casos de uso de datos personalizados

Agregar datos personalizados a las grabaciones amplía las posibilidades de tus apps de RA. Estos son algunos casos de uso específicos.

Usa la RA estés donde estés

Antes, los usuarios solo podían acceder a experiencias de RA en el lugar y el momento adecuados. Si quisieran colocar una lámpara de RA en la sala de estar, tenían que estar físicamente parados en el lugar para ver cómo se vería allí. Con las pistas personalizadas, pueden grabar su sala de estar una sola vez y agregar muebles virtuales a la escena cuando lo deseen.

Crea experiencias de RA en conjunto

Sin un requisito de una sesión en vivo, los usuarios tienen muchas más opciones de edición de RA, lo que les permite crear contenido único de RA y acceder a él en cualquier lugar y momento. Por ejemplo, pueden grabar un entorno determinado, agregar efectos de realidad aumentada y compartirlos con amigos.

Requisitos previos

Asegúrate de comprender los conceptos fundamentales de RA y cómo configurar una sesión de ARCore antes de continuar.

Cómo registrar con datos personalizados

Crea una grabación de la sesión con datos personalizados.

Cómo inicializar una grabación con datos personalizados

Sigue estos pasos para inicializar un registro con datos personalizados. Para iniciar, detener y revisar una sesión de grabación, consulta Cómo grabar y reproducir sesiones de RA.

  1. Obtén un RecordingConfig.
  2. Crea una Track nueva con un UUID personalizado. Todos los datos personalizados se guardarán aquí.
  3. Agrega el Track al RecordingConfig que creaste durante la configuración de la sesión.

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)

Todas las pistas nuevas se consideran grabaciones separadas, y cada pista grabada ocupa su propio UUID.

Opcional: Configura el segmento con datos adicionales

En caso de que quieras identificarla más adelante, puedes configurar una pista con datos adicionales que describa la grabación de la sesión. Por ejemplo, puedes "etiquetar" una pista agregando una nota que describa la ubicación y la hora en las que grabaste la sesión: "Esta sesión se grabó en el centro comercial a la tarde".

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

Opcional: Configura la pista con un tipo de MIME

Si tu app necesita ser compatible con herramientas externas, puedes configurar un segmento con un tipo de MIME que describa el tipo de datos registrados en el segmento. Si no especificas un tipo, los datos se categorizarán como application/text. ARCore ignora el tipo de MIME cuando lee datos.

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

Graba seguimientos de datos personalizados

Todos los datos de pistas personalizadas se registran en Frame. Las sesiones de RA usan session.update() para obtener un fotograma. El momento en que registras datos en un fotograma es el mismo momento en el que se devuelven los datos durante la reproducción. Por ejemplo, si llamas a recordTrackData() con el valor "A" en 00:07:02, obtendrás "A" en la marca 00:07:02 cuando se reproduzca la pista.

Para registrar un seguimiento de datos personalizado, convierte los datos en un ByteBuffer y llama a 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)
}

Cómo reproducir pistas de datos personalizadas

Extrae datos personalizados de una grabación de sesión durante la reproducción.

Cómo inicializar una reproducción

Inicializar una reproducción con datos personalizados es lo mismo que inicializar la reproducción de una grabación de una sesión normal.

Muestra datos personalizados

Llama a getUpdatedTrackData() para recuperar los datos personalizados registrados en un fotograma. Es posible recuperar varios datos de seguimiento del mismo fotograma. Por ejemplo, si llamaste a recordTrackData() dos veces en el mismo fotograma durante la grabación, obtendrás dos instancias de TrackData durante la reproducción.

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)

Una vez que TrackData esté en un objeto de contenedor, extrae los bytes de datos personalizados.

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

¿Qué sigue?