Nagrywanie i odtwarzanie sesji AR na Androidzie NDK

Nagranie Odtwarzanie API pozwala jednorazowo nagrać dane wideo i AR w danym środowisku i wykorzystać te treści do zastąpienia sesji kamery na żywo.

Wymagania wstępne

Upewnij się, że znasz podstawowe pojęcia związane z AR. i dowiedz się, jak skonfigurować sesję ARCore, zanim przejdziesz dalej.

Zgodność z innymi interfejsami API ARCore

Ze względu na sposób przetwarzania danych sesji interfejsy ARCore API mogą podczas odtwarzania uzyskiwać inne wyniki niż zaobserwowane podczas nagrywania. Mogą też przynieść inne wyniki podczas kolejnych sesji odtwarzania. Na przykład liczba wykrytych elementów możliwych do śledzenia, dokładny czas wykrycia i ich pozycje w czasie mogą być inne podczas odtwarzania.

Zgodność z Cloud Anchors

Zakotwiczone elementy Cloud możesz hostować i rozwiązywać podczas nagrywania lub odtwarzania sesji.

Nagrywanie

Rozpoczynanie i zatrzymywanie nagrywania sesji ARCore oraz sprawdzanie ich stanu.

Nagrywanie sesji ARCore

Aby nagrać sesję ARCore, skonfiguruj sesję i podaj identyfikator URI nagrania w formacie MP4. Zadzwoń pod numer ArSession_startRecording() przed pierwszym połączeniem z numerem ArSession_resume(). Nagrywanie rozpocznie się automatycznie po wznowieniu sesji. Aby automatycznie przerwać nagrywanie po wstrzymaniu sesji, zadzwoń pod numer ArRecordingConfig_setAutoStopOnPause(). Aby nagrać częściową sesję, wywołaj ArSession_startRecording() w trakcie jej trwania.

ArRecordingConfig* recording_config = nullptr;
ArRecordingConfig_create(ar_session, &recording_config);
ArRecordingConfig_setMp4DatasetUri(ar_session, recording_config,
                                   mp4_dataset_uri);
ArRecordingConfig_setAutoStopOnPause(ar_session, recording_config, true);

CHECK(ArSession_startRecording(ar_session, recording_config));
// …
// Resume ARCore session to start recording.
CHECK(ArSession_resume(ar_session));
// …
// Recording ends.
CHECK(ArSession_pause(ar_session));

Zatrzymywanie nagrywania

Aby zatrzymać nagrywanie bez wstrzymania aktualnie uruchomionej sesji AR, wywołaj ArSession_stopRecording() i ArRecordingConfig_destroy().

ArStatus status = ArSession_stopRecording(ar_session);
ArRecordingConfig_destroy(recording_config);

Sprawdź stan nagrywania

ArSession_getRecordingStatus() może zostać w dowolnym momencie użyta do określenia bieżącego ArRecordingStatus.

ArRecordingStatus recording_status;
// Can be called at any time.
ArSession_getRecordingStatus(ar_session, &recording_status);
if (recording_status == AR_RECORDING_NONE) {
  // The dataset recorder is not recording.
} else if (recording_status == AR_RECORDING_OK) {
  // The dataset recorder is recording normally.
} else if (recording_status == AR_RECORDING_IO_ERROR) {
  // The dataset recorder encountered an error while recording.
}

Odtwarzanie

Odtwarzanie wcześniej nagranych sesji AR. Sesje są odtwarzane w czasie rzeczywistym. Nie można też dostosować odtwarzania ani szybkości transmisji w sesji.

Odtwarzanie wcześniej nagranej sesji

Aby odtworzyć nagraną wcześniej sesję, wywołaj ArSession_setPlaybackDatasetUri() przed pierwszym wywołaniem ArSession_resume()

Po rozpoczęciu odtwarzania w związku z pierwszym wywołaniem funkcji ArSession_resume() wstrzymanie sesji przez wywołanie metody ArSession_pause() spowoduje zawieszenie przetwarzania wszystkich klatek zdjęć z aparatu i wszelkich innych danych z czujnika zarejestrowanych w zbiorze danych. Ramki zdjęcia z aparatu i dane z czujnika, które zostały odrzucone w ten sposób, nie zostaną przetworzone ponownie po ponownym wznowieniu sesji przez wywołanie metody ArSession_resume(). Funkcja śledzenia AR w trakcie sesji będzie na ogół ucierpiała z powodu luk w przetworzonych danych.

// Specify previously recorded MP4 file.
CHECK(ArSession_setPlaybackDatasetUri(ar_session, mp4_dataset_uri));
// …
// Playback starts from the beginning of the dataset.
CHECK(ArSession_resume(ar_session));
// …
// Pause AR session, but allow playback to silently continue.
CHECK(ArSession_pause(ar_session));
// …
// Resume AR session. Playback continues with gap to paused session.
CHECK(ArSession_resume(ar_session));

Wznów odtwarzanie od początku

Aby ponownie uruchomić odtwarzanie od początku zbioru danych, wstrzymaj sesję i zadzwoń ArSession_setPlaybackDatasetUri() określenie tego samego nagrania MP4 przed wznowieniem sesji.

CHECK(ArSession_pause(ar_session));
// Pause and specify the *same* dataset:
CHECK(ArSession_setPlaybackDatasetUri(ar_session, mp4_dataset_uri));
// Playback starts from the *beginning* of the dataset.
CHECK(ArSession_resume(ar_session));

Odtwórz inną sesję

Aby odtworzyć inny zbiór danych, wstrzymaj sesję i podaj nowy zbiór danych. przed wznowieniem sesji.

CHECK(ArSession_pause(ar_session));
// Pause and specify a *different* dataset:
CHECK(ArSession_setPlaybackDatasetUri(ar_session, other_mp4_dataset_uri));
// Playback starts from the *beginning* of the new dataset.
CHECK(ArSession_resume(ar_session));

Sprawdzanie stanu odtwarzania

Używaj ArSession_getPlaybackStatus() w dowolnym momencie, aby określić bieżącą ArPlaybackStatus

ArPlaybackStatus playback_status;
// Can be called at any time.
ArSession_getPlaybackStatus(ar_session, &playback_status);
if (playback_status == AR_PLAYBACK_NONE) {
  // The session is not playing back an MP4 dataset file.
} else if (playback_status == AR_PLAYBACK_OK) {
  // Playback is in process without issues.
} else if (playback_status == AR_PLAYBACK_IO_ERROR) {
  // Playback has stopped due to an error.
} else if (playback_status == AR_PLAYBACK_FINISHED) {
  // Playback has finished successfully.
}

Co dalej?