Nagranie Interfejs PLAY 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 włącza automatycznie do nagrań żadnych danych niestandardowych. Umożliwia natomiast dodanie niestandardowych danych do klatki ARCore podczas nagrywania i pobranie ich z klatki 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. Aby umieścić lampę AR w salonie, musiał(a) fizycznie stać w danym miejscu, aby sprawdzić, jak lampa będzie wyglądała. Dzięki spersonalizowanym ścieżkom audio mogą raz nagrać swój salon i dodać wirtualne meble do sceny w odpowiednim momencie.
Współtwórz funkcje 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 rozpocząć nagrywanie z niestandardowymi danymi, wykonaj te czynności. Informacje o rozpoczynaniu, zatrzymywaniu i sprawdzaniu sesji nagrywania znajdziesz w artykule Nagrywanie i odtwarzanie sesji AR.
- Uzyskaj
ArRecordingConfig
. - Utwórz nowy identyfikator
ArTrack
z niestandardowym identyfikatorem UUID. Tutaj będą zapisywane wszystkie dane niestandardowe. - Dodaj
ArTrack
do polaArRecordingConfig
utworzonego podczas konfiguracji sesji.
// 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);
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, które opisują nagranie sesji. Możesz na przykład „otagować” utwór, dodając notatkę opisującą miejsce i godzinę nagrania sesji: „Ta sesja została zarejestrowana po południu w centrum handlowym”.
// 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);
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.
// Set a MIME type for compatibility with external tools. ArTrack_setMimeType(ar_session, track, "text/csv");
Rejestrowanie niestandardowych ścieżek danych
Wszystkie dane ścieżki niestandardowej są rejestrowane w ArFrame
. Sesje AR używają klatki ArSession_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 ArFrame_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, wywołaj 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); }
Odtwarzanie niestandardowych ścieżek danych
Wyodrębnianie danych niestandardowych z nagrania w sesji podczas odtwarzania.
Inicjowanie odtwarzania
Inicjowanie odtwarzania z wykorzystaniem danych niestandardowych odpowiada inicjowaniu odtwarzania zwykłego nagrania w sesji.
Zwróć dane niestandardowe
Wywołaj ArFrame_getUpdatedTrackData()
, aby pobrać dane niestandardowe zarejestrowane w ArFrame
. Z tej samej ramki można pobrać dane wielu ścieżek. Jeśli na przykład wywołasz ArFrame_recordTrackData()
2 razy w tej samej klatce podczas nagrywania, podczas odtwarzania otrzymasz 2 wystąpienia 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);
Gdy obiekt ArTrackData
znajdzie się w obiekcie kontenera, wyodrębnij bajty danych niestandardowych.
// 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);
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