Agrega datos personalizados mientras grabas en Android

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

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

Casos de uso para 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 RA sobre la marcha

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

Cocrea experiencias de RA

Como no exigen sesiones en vivo, los usuarios tienen muchas más opciones de edición en RA, lo que les permite crear contenido único de RA y acceder a él en cualquier momento y lugar. 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.

Graba con datos personalizados

Crear una grabación de sesión con datos personalizados

Inicializa una grabación con datos personalizados

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

  1. Obtén un RecordingConfig.
  2. Crea un Track nuevo 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 tratan como grabaciones independientes y cada una de ellas ocupa su propio UUID.

Opcional: Configura el segmento con datos adicionales

En caso de que desees identificarla más adelante, puedes configurar una pista con datos adicionales que describan la grabación de la sesión. Por ejemplo, puedes "etiquetar" una pista agregando una nota que describa la ubicación y la hora a la que grabaste la sesión: "Esta sesión se grabó en el centro comercial por 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 el segmento 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")

Cómo grabar segmentos de datos personalizados

Todos los datos de los segmentos personalizados se registran en Frame. Las sesiones de RA usan session.update() para obtener un fotograma. La hora en la que grabas datos en un fotograma es la misma hora en la que se mostrarán 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 segmentos de datos personalizados

Extraer datos personalizados de un registro de sesión durante la reproducción

Cómo inicializar una reproducción

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

Cómo mostrar datos personalizados

Llama a getUpdatedTrackData() para recuperar los datos personalizados registrados en un fotograma. Es posible recuperar varios datos de pista desde el 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 el TrackData esté en un objeto 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?