Добавление пользовательских данных во время записи в AR Foundation для Android

API записи и воспроизведения позволяет записывать сеанс и использовать его вместо видео с камеры в реальном времени. Однако эти записи содержат только данные видео и датчиков. Вы также можете добавить пользовательские данные в запись сеанса, и данные будут возвращены вам во время воспроизведения, как если бы они были частью изображения с камеры.

ARCore не включает автоматически какие-либо пользовательские данные в записи. Скорее, он позволяет добавлять пользовательские данные в кадр ARCore во время записи и извлекать те же данные из кадра во время воспроизведения. Вы должны запрограммировать приложение таким образом, чтобы пользователь возвращал ожидаемые данные при воспроизведении сеанса.

Варианты использования пользовательских данных

Добавление пользовательских данных в записи расширяет возможности ваших приложений AR. Ниже приведены некоторые конкретные случаи использования.

Используйте AR на ходу

Раньше пользователи могли получить доступ к AR-возможностям только в нужном месте и в нужное время. Если они хотели разместить лампу AR в своей гостиной, им приходилось физически стоять на этом месте, чтобы увидеть, как лампа может там выглядеть. С помощью пользовательских треков они могут один раз записать свою гостиную и добавить в сцену виртуальную мебель, когда захотят.

Совместное создание AR-опыта

Без необходимости сеанса в реальном времени у пользователей появляется гораздо больше возможностей для редактирования AR, что позволяет им создавать уникальный AR-контент и получать к нему доступ в любом месте и в любое время. Например, они могут записывать заданную среду, добавлять эффекты дополненной реальности и делиться ими с друзьями.

Предварительные условия

Прежде чем продолжить, убедитесь, что вы понимаете фундаментальные концепции AR и то, как настроить сеанс ARCore .

Инициализация записи с пользовательскими данными

Выполните следующие действия, чтобы инициализировать запись с пользовательскими данными. Чтобы начать, остановить и проверить сеанс записи, см. раздел Запись и воспроизведение сеанса AR .

  1. Получите ARCoreRecordingConfig .
  2. Создайте новый Track с пользовательским UUID . Все пользовательские данные будут сохранены здесь.
  3. Добавьте Track в ARCoreRecordingConfig , который вы создали во время настройки сеанса.
// 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.
var track = new Track {
 Id = Guid.Parse("de5ec7a4-09ec-4c48-b2c3-a98b66e71893") // from UUID generator
};

// Add the Track to the recordingConfig.
// recordingConfig must already be configured.
List<Track> tracks = new List<Track>();
tracks.Add(track);
recordingConfig.Tracks = tracks;

Все новые треки рассматриваются как отдельные записи, причем каждый записанный трек занимает свой собственный UUID.

Настройте трек с дополнительными данными

Настройте трек с дополнительными данными, описывающими запись сеанса. Например, вы можете «пометить» трек, добавив примечание, описывающее место и время записи сеанса: «Этот сеанс был записан в торговом центре днем».

// Set additional data on this track.
// For example, describe where you recorded the session.
byte[] metadata = ...
track.Metadata = metadata;

Настройте трек с типом MIME

Настройте дорожку с типом MIME , который описывает тип данных, записанных на дорожке, для совместимости с внешними инструментами.

Если вы не укажете тип, данные будут отнесены к категории application/text . ARCore игнорирует тип MIME при чтении данных.

// Set a MIME type for compatibility with external tools.
track.MimeType = "text/csv";

Запись треков пользовательских данных

Все данные пользовательского трека записываются в кадры. Время записи данных в кадр совпадает с временем, когда данные будут возвращены во время воспроизведения. Например, если вы вызовете RecordTrackData() со значением «A» в 00:07:02 , вы получите «A» обратно в отметке 00:07:02 при воспроизведении дорожки.

Чтобы записать пользовательскую дорожку данных, вызовите RecordTrackData() .

// Place an AR lamp in a room.
if (placeLampButtonWasPressed) {
  // Convert the lamp data into a byte array.
  var lampData = new byte[] { (byte) Lamp.FLOOR };  // a floor lamp
  recordingManager.RecordTrackData(trackGuid, lampData);
}

Воспроизведение дорожек пользовательских данных

Извлекайте пользовательские данные из записи сеанса во время воспроизведения.

Инициализация воспроизведения

Инициализация воспроизведения с пользовательскими данными аналогична инициализации воспроизведения обычной записи сеанса .

Возврат пользовательских данных

Вызовите GetUpdatedTrackData() , чтобы получить пользовательские данные, записанные в кадре. Можно получить данные нескольких дорожек из одного и того же кадра. Например, если вы вызвали RecordTrackData() два раза для одного и того же кадра во время записи, вы получите два экземпляра TrackData во время воспроизведения.

// Fetch the data recorded on a select frame and place it in a
// container object.
var trackDataList = recordingManager.GetUpdatedTrackData(trackGuid);

Как только TrackData окажется в объекте-контейнере, извлеките байты пользовательских данных.

// Extract the bytes of custom data from the list of track data.
foreach (TrackData trackData in trackDataList) {
  var data = trackData.Data;
  Lamp lamp = Lamp.fromByte(data[0]); // This is the lamp!
}

Что дальше