L'API Registrazione e riproduzione ti consente di registrare video e dati AR una volta in un determinato ambiente e di utilizzare questi contenuti per sostituire una sessione della videocamera in diretta.
Prerequisiti
Assicurati di aver compreso i concetti fondamentali di AR e di come configurare una sessione ARCore prima di procedere.
Compatibilità con altre API ARCore
A causa del modo in cui vengono elaborati i dati della sessione, le API ARCore potrebbero produrre risultati diversi durante la riproduzione rispetto a quelli osservati durante la registrazione. Inoltre, potrebbero produrre risultati diversi durante le sessioni di riproduzione successive. Ad esempio, il numero di dispositivi rilevabili, la tempistica precisa del loro rilevamento e le loro pose nel tempo potrebbero essere diversi durante la riproduzione.
Compatibilità con gli ancoraggi Cloud
Puoi ospitare e risolvere gli ancoraggi cloud durante la registrazione o la riproduzione di una sessione.
Registrazione
Avvia, interrompi e controlla lo stato di una registrazione della sessione ARCore.
Registrare una sessione ARCore
Per registrare una sessione ARCore, configurala e fornisci un URI MP4 per la registrazione. Chiama ARRecordingManager.StartRecording()
prima di riprendere la sessione. La registrazione inizia automaticamente quando la sessione riprende. Per interrompere automaticamente la registrazione quando la sessione è in pausa, chiama ARRecordingConfig.AutoStopOnPause
. Per registrare una sessione parziale, chiama ARRecordingManager.StartRecording()
mentre la sessione è in esecuzione.
ARCoreRecordingConfig recordingConfig = ScriptableObject.CreateInstance<ARCoreRecordingConfig>();
Uri datasetUri = new System.Uri("file:///uri/for/dataset.mp4");
recordingConfig.Mp4DatasetUri = datasetUri.AbsoluteUri;
recordingManager.StartRecording(recordingConfig);
Interrompere la registrazione di una sessione
Per interrompere la registrazione senza mettere in pausa la sessione AR in esecuzione, chiama ARRecordingManager.StopRecording()
.
recordingManager.StopRecording();
Controllare lo stato della registrazione
ARRecordingManager.RecordingStatus
può essere utilizzato in qualsiasi momento per determinare lo stato corrente della registrazione.
Debug.Log("Current Recording Status: " + recordingManager.RecordingStatus);
Riproduzione
Riprodurre le sessioni AR registrate in precedenza. Le sessioni vengono riprodotte in tempo reale e non è possibile regolarne la velocità o la riproduzione.
Riprodurre una sessione registrata in precedenza
Per riprodurre una sessione registrata in precedenza, chiama
ARPlaybackManager.SetPlaybackDatasetUri()
e fornisci un URI per il set di dati che vuoi riprodurre. Per utilizzare questo metodo, devi mettere in pausa la sessione. Riprendi la sessione per rendere effettiva
la modifica.
Una volta avviata la riproduzione a causa della ripresa della sessione, la messa in pausa della sessione disattivando il pulsanteARSession
sospende l'elaborazione di tutti i frame delle immagini della fotocamera e di qualsiasi altro dato del sensore registrato nel set di dati. I frame delle immagini della videocamera e i dati dei frame del sensore eliminati in questo modo non verranno sottoposti a nuovo trattamento quando la sessione viene riavviata. Il monitoraggio AR per la sessione in genere ne risente a causa della carenza di dati elaborati.
// Disable the ARSession to pause the current AR session.
session.enabled = false;
// In the next frame, provide a URI for the dataset you wish to play back.
Uri datasetUri = new System.Uri("file:///uri/for/dataset.mp4");
playbackManager.SetPlaybackDatasetUri(datasetUri);
// In the frame after that, re-enable the ARSession to resume the session from
// the beginning of the dataset.
session.enabled = true;
Problema noto e soluzione alternativa
Esiste un problema noto per cui le chiamate a
ARPlaybackManager.SetPlaybackDatasetUri()
resistono
ErrorPlaybackFailed
.
Questo accade perché possono essere necessari diversi frame per mettere in pausa una sessione. Se
ARPlaybackManager.SetPlaybackDatasetUri()
viene chiamato prima che la sessione sia stata messa in pausa, non potrà accedere alla
sessione, quindi restituirà un errore.
Il seguente codice può essere utilizzato come soluzione alternativa.
// Workaround for known issue where `playbackManager.SetPlaybackDatasetUri()`
// returns `ErrorPlaybackFailed` because it can take several frames for a
// session to be paused.
// Reference to the ARSession component in the scene.
ARSession session;
void PlaybackDataset()
{
setPlaybackDataset = true;
// Pause the current AR session.
session.enabled = false;
// Set a timeout for retrying playback retrieval.
timeout = 10f;
}
// Next frame
void Update()
{
...
if (setPlaybackDataset)
{
PlaybackResult result = playbackManager.SetPlaybackDatasetUri(datasetUri);
if (result == PlaybackResult.ErrorPlaybackFailed || result == PlaybackResult.SessionNotReady)
{
// Try to set the dataset again in the next frame.
timeout -= Time.deltaTime;
}
else
{
// Do not set the timeout if the result is something other than ErrorPlaybackFailed.
timeout = -1f;
}
if (timeout < 0.0f)
{
setPlaybackDataset = false;
// If playback is successful, proceed as usual.
// If playback is not successful, handle the error appropriately.
}
}
...
}
Interrompere una riproduzione
Per interrompere una riproduzione, chiama ARPlaybackManager.SetPlaybackDatasetUri()
e imposta l'URI del set di dati su null
.
// Disable the ARSession to pause the current AR session.
session.enabled = false;
// In the next frame, unset the playback dataset URI.
playbackManager.SetPlaybackDatasetUri(null);
// In the frame after that, re-enable the ARSession to resume the session using
// the device camera and other sensors.
session.enabled = true;
Riavviare la riproduzione dall'inizio
Per riavviare la riproduzione dall'inizio del set di dati, chiama ARPlaybackManager.SetPlaybackDatasetUri()
e specifica la stessa registrazione MP4 prima di riprendere la sessione.
// Disable the ARSession to pause the current AR session.
session.enabled = false;
// In the next frame, specify the same dataset URI.
playbackManager.SetPlaybackDatasetUri(datasetUri); // Same URI that was previously set.
// In the frame after that, re-enable the ARSession to resume the session from
// the beginning of the dataset.
session.enabled = true;
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.
// Disable the ARSession to pause the current AR session.
session.enabled = false;
// In the next frame, specify a new dataset URI.
Uri newDatasetUri = new System.Uri("file:///uri/for/different/dataset.mp4");
playbackManager.SetPlaybackDatasetUri(newDatasetUri); // Different URI than was previously set.
// In the frame after that, re-enable the ARSession to resume the session from
// the beginning of the new dataset.
session.enabled = true;
Controllare lo stato della riproduzione
L'icona ARPlaybackManager.PlaybackStatus
può essere utilizzata in qualsiasi momento per determinare lo stato di riproduzione attuale.
Debug.Log("Current Playback Status: " + playbackManager.PlaybackStatus);
Passaggi successivi
- Scopri come aggiungere dati personalizzati alle sessioni registrate.