API записи и воспроизведения позволяет записывать сеанс и использовать его вместо видео с камеры в реальном времени. Однако эти записи содержат только данные видео и датчиков. Вы также можете добавить пользовательские данные в запись сеанса, и данные будут возвращены вам во время воспроизведения, как если бы они были частью изображения с камеры.
ARCore не включает автоматически какие-либо пользовательские данные в записи. Скорее, он позволяет добавлять пользовательские данные в кадр ARCore во время записи и извлекать те же данные из кадра во время воспроизведения. Вы должны запрограммировать приложение таким образом, чтобы пользователь возвращал ожидаемые данные при воспроизведении сеанса.
Варианты использования пользовательских данных
Добавление пользовательских данных в записи расширяет возможности ваших приложений AR. Ниже приведены некоторые конкретные случаи использования.
Используйте AR на ходу
Раньше пользователи могли получить доступ к AR-возможностям только в нужном месте и в нужное время. Если они хотели разместить лампу AR в своей гостиной, им приходилось физически стоять на этом месте, чтобы увидеть, как лампа может там выглядеть. С помощью пользовательских треков они могут один раз записать свою гостиную и добавить в сцену виртуальную мебель, когда захотят.
Совместное создание AR-опыта
Без требования живого сеанса у пользователей появляется гораздо больше возможностей для редактирования AR, что позволяет им создавать уникальный AR-контент и получать к нему доступ в любом месте и в любое время. Например, они могут записывать заданную среду, добавлять эффекты дополненной реальности и делиться ими с друзьями.
Предварительные условия
Прежде чем продолжить, убедитесь, что вы понимаете фундаментальные концепции AR и то, как настроить сеанс ARCore .
Запись с пользовательскими данными
Создайте запись сеанса с пользовательскими данными.
Инициализация записи с пользовательскими данными
Выполните следующие действия, чтобы инициализировать запись с пользовательскими данными. Чтобы начать, остановить и проверить сеанс записи, см. раздел Запись и воспроизведение сеанса AR .
- Получите
ArRecordingConfig
. - Создайте новый
ArTrack
с собственным UUID . Все пользовательские данные будут сохранены здесь. - Добавьте
ArTrack
вArRecordingConfig
, который вы создали во время настройки сеанса.
// 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);
Все новые треки рассматриваются как отдельные записи, причем каждый записанный трек занимает свой собственный UUID.
Необязательно: настройте трек с дополнительными данными.
В случае, если вы захотите идентифицировать его позже, вы можете настроить трек с дополнительными данными, описывающими запись сеанса. Например, вы можете «пометить» трек, добавив примечание, описывающее место и время записи сеанса: «Этот сеанс был записан в торговом центре днем».
// 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);
Необязательно: настройте трек с типом MIME.
Если ваше приложение должно быть совместимо с внешними инструментами, вы можете настроить дорожку с типом MIME , который описывает тип данных, записанных на дорожке. Если вы не укажете тип, данные будут отнесены к категории application/text
. ARCore игнорирует тип MIME при чтении данных.
// Set a MIME type for compatibility with external tools.
ArTrack_setMimeType(ar_session, track, "text/csv");
Запись треков пользовательских данных
Все данные пользовательского трека записываются в ArFrame
. Сеансы AR используют ArSession_update()
для получения кадра. Время записи данных в кадр совпадает с временем, когда данные будут возвращены во время воспроизведения. Например, если вы вызовете ArFrame_recordTrackData()
со значением «A» в 00:07:02
, вы получите «A» обратно на отметке 00:07:02
при воспроизведении дорожки.
Чтобы записать пользовательскую дорожку данных, вызовите 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);
}
Воспроизведение дорожек пользовательских данных
Извлекайте пользовательские данные из записи сеанса во время воспроизведения.
Инициализация воспроизведения
Инициализация воспроизведения с пользовательскими данными аналогична инициализации воспроизведения обычной записи сеанса .
Возврат пользовательских данных
Вызовите ArFrame_getUpdatedTrackData()
, чтобы получить пользовательские данные, записанные в ArFrame
. Можно получить данные нескольких дорожек из одного кадра. Например, если вы дважды вызвали ArFrame_recordTrackData()
для одного и того же кадра во время записи, вы получите два экземпляра ArTrackData
во время воспроизведения.
// 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);
Как только ArTrackData
окажется в объекте-контейнере, извлеките байты пользовательских данных.
// 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);
Что дальше
- Узнайте, как создать собственное приложение с функцией записи и воспроизведения, изучив кодовую лабораторию записи и воспроизведения .