Registrare e riprodurre una sessione AR su Android NDK

Le funzionalità di registrazione e L'API Playback ti consente di registrare video e dati AR una sola volta in un determinato ambiente e di utilizzare quei contenuti per sostituire una sessione di videocamera in diretta.

Prerequisiti

Assicurati di comprendere i concetti fondamentali della realtà aumentata e su come configurare una sessione ARCore prima di procedere.

Compatibilità con altre API ARCore

A causa della modalità di elaborazione dei dati della sessione, le API ARCore potrebbero produrre risultati diversi durante la riproduzione rispetto a quelli osservati durante la registrazione. Potrebbero anche produrre risultati diversi durante sessioni di riproduzione successive. Ad esempio, il numero di dispositivi tracciabili rilevati, la tempistica esatta del loro rilevamento e le loro pose nel tempo potrebbero variare durante la riproduzione.

Compatibilità con gli ancoraggi Cloud

Puoi ospitare e risolvere i problemi Cloud Anchor durante la registrazione o la riproduzione di una sessione.

Registrazione

Avviare, interrompere e controllare lo stato della registrazione di una sessione ARCore.

Registrare una sessione ARCore

Per registrare una sessione ARCore, configura la sessione e fornisci un URI MP4 per la registrazione. Chiama ArSession_startRecording() prima della prima chiamata al numero ArSession_resume(). La registrazione inizia automaticamente quando la sessione riprende. Per interrompere automaticamente la registrazione quando la sessione viene sospesa, chiama ArRecordingConfig_setAutoStopOnPause(). Per registrare una sessione parziale, chiama ArSession_startRecording() mentre la sessione è in esecuzione.

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));

Interrompere una registrazione

Per interrompere la registrazione senza mettere in pausa la sessione AR attualmente in esecuzione, chiama ArSession_stopRecording() e ArRecordingConfig_destroy().

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

Controllare lo stato della registrazione

ArSession_getRecordingStatus() può essere utilizzato in qualsiasi momento per determinare l'attuale 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.
}

Riproduzione

Riprodurre le sessioni AR registrate in precedenza. Le sessioni vengono riprodotte in tempo reale e la riproduzione o la velocità delle sessioni non possono essere regolate.

Riprodurre una sessione registrata in precedenza

Per riprodurre una sessione registrata in precedenza, richiama ArSession_setPlaybackDatasetUri() prima della prima chiamata a ArSession_resume().

Una volta avviata la riproduzione a causa della prima chiamata a ArSession_resume(), la sospensione della sessione chiamando ArSession_pause() sospenderà l'elaborazione di tutti i frame immagine della videocamera e di qualsiasi altro dato del sensore registrato nel set di dati. Le cornici delle videocamere e i dati dei frame del sensore che vengono eliminati in questo modo non verranno rielaborati quando la sessione verrà ripresa di nuovo chiamando il numero ArSession_resume(). Il monitoraggio AR per la sessione in genere ne risentirà a causa della carenza di dati elaborati.

// 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));

Riavvia la riproduzione dall'inizio

Per riavviare una riproduzione dall'inizio del set di dati, metti in pausa la sessione chiamata ArSession_setPlaybackDatasetUri(), che specifica la stessa registrazione MP4, prima di riprendere la sessione.

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));

Riprodurre una sessione diversa

Per riprodurre un set di dati diverso, metti in pausa la sessione e specifica il nuovo set di dati prima di riprendere la sessione.

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));

Controllare lo stato della riproduzione

Utilizza le funzionalità di ArSession_getPlaybackStatus() in qualsiasi momento per determinare lo stato attuale 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.
}

Passaggi successivi