Interfejs nagrywania i odtwarzania umożliwia nagranie sesji i używanie jej zamiast obrazu przesyłanego w czasie rzeczywistym z kamery. Nagrania te zawierają jednak tylko obraz i dane z czujników. Do nagrania sesji możesz też dodać niestandardowe dane, które będą Ci zwracane podczas odtwarzania, tak jakby były częścią obrazu z aparatu.
ARCore nie uwzględnia automatycznie w nagraniach żadnych danych niestandardowych. Zamiast tego możesz dodawać do ramki ARCore dane niestandardowe podczas nagrywania i pobierać te same dane z klatki podczas odtwarzania. Do Ciebie należy zaprogramowanie aplikacji w taki sposób, aby użytkownik odzyskał oczekiwane dane podczas odtwarzania sesji.
Przypadki użycia danych niestandardowych
Dodawanie niestandardowych danych do nagrań zwiększa możliwości aplikacji AR. Poniżej przedstawiamy kilka konkretnych przypadków użycia.
Używaj AR, gdziekolwiek jesteś
W przeszłości użytkownicy mogli korzystać z funkcji AR tylko w odpowiednim miejscu i czasie. Aby umieścić w salonie lampę AR, musieli stać na miejscu, żeby sprawdzić, jak ta lampa może wyglądać. Dzięki ścieżkom szyfru spersonalizowanym mogą nagrać swój salon raz i w dowolnej chwili dodać do sceny wirtualne meble.
Wspólne tworzenie doświadczeń AR
Użytkownicy, którzy nie wymagają sesji na żywo, mają znacznie więcej opcji edycji AR, dzięki czemu mogą tworzyć wyjątkowe treści AR oraz uzyskiwać do nich dostęp w dowolnym miejscu i czasie. Mogą na przykład nagrywać dane otoczenie, dodawać efekty rzeczywistości rozszerzonej i udostępniać je znajomym.
Wymagania wstępne
Zanim przejdziesz dalej, upewnij się, że znasz podstawowe pojęcia związane z AR i wiesz, jak skonfigurować sesję ARCore.
Rejestruj z użyciem danych niestandardowych
Utworzyć nagranie sesji z danymi niestandardowymi.
Inicjowanie nagrania z użyciem danych niestandardowych
Aby zainicjować nagranie z danymi niestandardowymi, wykonaj te czynności. Informacje o rozpoczynaniu, zatrzymywaniu i sprawdzaniu sesji nagrywania znajdziesz w artykule Nagrywanie i odtwarzanie sesji AR.
- Uzyskaj
RecordingConfig
. - Utwórz nowy identyfikator
Track
z niestandardowym identyfikatorem UUID. Tutaj będą zapisywane wszystkie dane niestandardowe. - Dodaj
Track
doRecordingConfig
utworzonego podczas konfiguracji sesji.
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)
Wszystkie nowe ścieżki są traktowane jako osobne nagrania, a każda z nich ma własny identyfikator UUID.
Opcjonalnie: konfigurowanie ścieżki z dodatkowymi danymi
Jeśli chcesz później zidentyfikować tę ścieżkę, możesz skonfigurować ścieżkę z dodatkowymi danymi opisującymi rejestrowanie sesji. Możesz na przykład otagować ścieżkę, dodając notatkę opisującą miejsce i czas nagrania sesji: „Ta sesja została zarejestrowana w centrum handlowym po południu”.
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))
Opcjonalnie: konfigurowanie ścieżki z typem MIME
Jeśli aplikacja musi być zgodna z narzędziami zewnętrznymi, możesz skonfigurować ścieżkę z typem MIME opisującym typ danych zarejestrowanych na ścieżce. Jeśli nie określisz typu, dane zostaną sklasyfikowane jako application/text
. Podczas odczytywania danych ARCore ignoruje typ MIME.
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")
Rejestrowanie niestandardowych ścieżek danych
Wszystkie dane ścieżek niestandardowych są rejestrowane w systemach Frame
. Sesje AR pobierają klatkę za pomocą session.update()
. Godzina zarejestrowania danych w klatce to ten sam czas, w którym dane zostaną zwrócone podczas odtwarzania. Jeśli na przykład wywołasz funkcję recordTrackData()
z wartością „A” w miejscu 00:07:02
, podczas odtwarzania utworu otrzymasz znak „A” w miejscu oznaczenia 00:07:02
.
Aby zarejestrować niestandardową ścieżkę danych, przekonwertuj dane na format ByteBuffer
i wywołaj 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) }
Odtwarzanie niestandardowych ścieżek danych
Wyodrębnianie danych niestandardowych z nagrania sesji podczas odtwarzania.
Inicjowanie odtwarzania
Inicjowanie odtwarzania z użyciem danych niestandardowych wygląda tak samo jak inicjowanie odtwarzania nagrania w zwykłej sesji.
Zwracanie danych niestandardowych
Wywołaj metodę getUpdatedTrackData()
, aby pobrać dane niestandardowe zarejestrowane w ramce. Możesz pobrać dane wielu ścieżek z tej samej ramki. Jeśli na przykład wywołasz funkcję recordTrackData()
2 razy na tej samej klatce podczas nagrywania, podczas odtwarzania otrzymasz 2 wystąpienia kodu TrackData
.
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)
Gdy TrackData
znajdzie się w obiekcie kontenera, wyodrębnij bajty danych niestandardowych.
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! }
Co dalej?
- Dzięki ćwiczeniom z programowania dotyczącym nagrywania i odtwarzania dowiesz się, jak stworzyć własną aplikację za pomocą funkcji nagrywania i odtwarzania.