Nagranie Interfejs Odtwarzanie API pozwala na nagrywanie sesji i używanie ich zamiast przesyłania obrazu z kamery w czasie rzeczywistym. Nagrania zawierają jednak tylko dane wideo i dane z czujnika. Możesz też dodać do nagrania sesji dane niestandardowe, które będą wyświetlane podczas odtwarzania tak, jakby były częścią obrazu z kamery.
ARCore nie uwzględnia automatycznie żadnych danych niestandardowych w nagraniach. Umożliwia ona dodawanie danych niestandardowych do ramki ARCore podczas nagrywania i pobieranie tych samych danych z ramki podczas odtwarzania. To Ty zaprogramujesz aplikację w taki sposób, aby po odtworzeniu sesji użytkownik odzyskał oczekiwane dane.
Przypadki użycia danych niestandardowych
Dodawanie niestandardowych danych do nagrań zwiększa możliwości aplikacji AR. Oto kilka konkretnych przypadków użycia.
Używaj AR z dowolnego miejsca
W przeszłości użytkownicy mogli korzystać z funkcji AR tylko we właściwym miejscu i czasie. Jeśli chcieli ustawić lampę AR w salonie, musieli stanąć w danym miejscu, aby zobaczyć, jak lampa będzie wyglądać. Dzięki spersonalizowanym ścieżkom audio mogą raz nagrać swój salon i dodać wirtualne meble do sceny w odpowiednim momencie.
Współtworzyć wrażenia AR
Użytkownicy, którzy nie mają wymogu sesji na żywo, mają do dyspozycji znacznie więcej opcji edycji AR, dzięki którym mogą tworzyć i otwierać niepowtarzalne treści AR 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
Upewnij się, że znasz podstawowe pojęcia związane z AR. i dowiedz się, jak skonfigurować sesję ARCore, zanim przejdziesz dalej.
Nagrywanie z danymi niestandardowymi
Utwórz nagranie sesji z danymi niestandardowymi.
Inicjowanie nagrania z użyciem danych niestandardowych
Aby zainicjować nagrywanie za pomocą danych niestandardowych, 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
do polaRecordingConfig
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 utwory są traktowane jako osobne nagrania, przy czym każda z nich ma własny identyfikator UUID.
Opcjonalnie: skonfiguruj ścieżkę z dodatkowymi danymi
Jeśli zechcesz zidentyfikować ją później, możesz skonfigurować ścieżkę z dodatkowymi danymi opisującymi nagranie sesji. Możesz na przykład „otagować” ścieżkę, dodając notatkę z opisem lokalizacji i czasu 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: skonfiguruj ścieżkę z typem MIME.
Jeśli Twoja aplikacja musi być zgodna z narzędziami zewnętrznymi, możesz skonfigurować ścieżkę z typem MIME, który opisuje typ danych rejestrowanych na niej. Jeśli nie określisz typu, dane zostaną sklasyfikowane jako application/text
. ARCore ignoruje typ MIME podczas odczytywania danych.
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żki niestandardowej są rejestrowane w Frame
. Sesje AR używają klatki session.update()
. Moment zarejestrowania danych w klatce jest tym samym czasem, w którym są one zwracane podczas odtwarzania. Jeśli na przykład wywołasz recordTrackData()
z wartością „A” w 00:07:02
, to przy odtworzeniu utworu otrzymasz „A” w miejscu 00:07:02
.
Aby zarejestrować niestandardową ścieżkę danych, przekształć dane w 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 w sesji podczas odtwarzania.
Inicjowanie odtwarzania
Inicjowanie odtwarzania z danymi niestandardowymi jest takie samo jak inicjowanie odtwarzania zwykłego nagrania sesji.
Zwróć dane niestandardowe
Wywołaj getUpdatedTrackData()
, aby pobrać dane niestandardowe zarejestrowane w ramce. Z tej samej ramki można pobrać dane wielu ścieżek. Jeśli na przykład wywołasz recordTrackData()
2 razy w tej samej klatce podczas nagrywania, podczas odtwarzania otrzymasz 2 wystąpienia 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 obiekt TrackData
znajdzie się w kontenerze, 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?
- Dowiedz się, jak stworzyć własną aplikację za pomocą funkcji Nagrywanie Aby odtworzyć, przejdź do sekcji Nagrywanie Ćwiczenie z programowania dotyczące odtwarzania