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);
Что дальше
- Узнайте, как создать собственное приложение с функцией записи и воспроизведения, изучив кодовую лабораторию записи и воспроизведения .
API записи и воспроизведения позволяет записывать сеанс и использовать его вместо видео с камеры в реальном времени. Однако эти записи содержат только данные видео и датчиков. Вы также можете добавить пользовательские данные в запись сеанса, и данные будут возвращены вам во время воспроизведения, как если бы они были частью изображения с камеры.
ARCore не включает автоматически какие-либо пользовательские данные в записи. Скорее, он позволяет добавлять пользовательские данные в кадр ARCore во время записи и извлекать те же данные из кадра во время воспроизведения. Вы должны запрограммировать приложение таким образом, чтобы пользователь возвращал ожидаемые данные при воспроизведении сеанса.
Варианты использования пользовательских данных
Добавление пользовательских данных в записи расширяет возможности ваших приложений 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);
Что дальше
- Узнайте, как создать собственное приложение с функцией записи и воспроизведения, изучив кодовую лабораторию записи и воспроизведения .