L'API Recording & Playback consente di registrare dati video e AR una sola volta all'interno di un determinato ambiente e di utilizzare questi contenuti per sostituire una sessione in diretta della videocamera.
Prerequisiti
Assicurati di aver compreso i concetti fondamentali di AR e di configurare una sessione ARCore prima di procedere.
Compatibilità con altre API ARCore
A causa del modo in cui i dati delle sessioni vengono elaborati, le API ARCore potrebbero produrre risultati diversi durante la riproduzione rispetto a quelli osservati durante la registrazione. Inoltre, potrebbero produrre risultati diversi durante sessioni di riproduzione successive. Ad esempio, il numero di elementi tracciabili rilevati, la tempistica precisa del loro rilevamento e le relative pose nel tempo potrebbero essere diversi durante la riproduzione.
Compatibilità con la videocamera condivisa
È possibile registrare le sessioni che utilizzano la fotocamera condivisa. Tuttavia, la riproduzione per queste sessioni utilizzando la modalità Fotocamera condivisa non è al momento disponibile.
Compatibilità con gli ancoraggi Cloud
Puoi ospitare e risolvere gli ancoraggi Cloud durante la registrazione o la riproduzione di una sessione.
Registrazione in corso…
Avvia, interrompi e controlla lo stato della registrazione di una sessione ARCore.
Registrare una sessione ARCore
Per registrare una sessione ARCore, configurala e fornisci un URI MP4 per la registrazione. Chiama il numero session.startRecording()
prima della prima chiamata al numero session.resume()
. La registrazione inizia automaticamente quando la sessione riprende. Per interrompere automaticamente la registrazione quando la sessione è in pausa, chiama il numero RecordingConfig.setAutoStopOnPause()
. Per registrare una sessione parziale, chiama session.startRecording()
mentre la sessione è in esecuzione.
Java
// Configure the ARCore session.
Session session = new Session(context);
Uri destination = Uri.fromFile(new File(context.getFilesDir(), "recording.mp4"));
RecordingConfig recordingConfig =
new RecordingConfig(session)
.setMp4DatasetUri(destination)
.setAutoStopOnPause(true);
try {
// Prepare the session for recording, but do not start recording yet.
session.startRecording(recordingConfig);
} catch (RecordingFailedException e) {
Log.e(TAG, "Failed to start recording", e);
}
// Resume the ARCore session to start recording.
session.resume();
Kotlin
// Configure the ARCore session.
val session = Session(context)
val destination = Uri.fromFile(File(context.getFilesDir(), "recording.mp4"))
val recordingConfig = RecordingConfig(session)
.setMp4DatasetUri(destination)
.setAutoStopOnPause(true)
session.startRecording(recordingConfig)
// Resume the ARCore session to start recording.
session.resume()
Interrompere la registrazione di una sessione
Per interrompere la registrazione senza sospendere la sessione AR attualmente in esecuzione, chiama il numero session.stopRecording()
.
Java
try {
session.stopRecording(); // Stop recording.
} catch (RecordingFailedException e) {
Log.e(TAG, "Failed to stop recording", e);
}
Kotlin
session.stopRecording()
Controllare lo stato della registrazione
session.getRecordingStatus()
può essere utilizzato in qualsiasi momento per determinare l'attuale RecordingStatus
.
Java
// Use any time to determine current RecordingStatus.
if (session.getRecordingStatus() == RecordingStatus.OK) {
// Update the UI to show that the session is currently being recorded.
}
Kotlin
// Use any time to determine current RecordingStatus.
if (session.recordingStatus == RecordingStatus.OK) {
// Update the UI to show that the session is currently being recorded.
}
Riproduzione
Riprodurre le sessioni AR registrate in precedenza. Le sessioni vengono riprodotte in tempo reale e la riproduzione o la velocità della sessione non possono essere regolate.
Riprodurre una sessione registrata in precedenza
Per riprodurre una sessione registrata in precedenza, chiama il numero session.setPlaybackDatasetUri()
prima della prima chiamata al numero session.resume()
.
Una volta avviata la riproduzione a causa della prima chiamata al numero session.resume()
, se metti in pausa la sessione chiamando session.pause()
, verrà sospesa l'elaborazione di tutti i fotogrammi delle immagini della videocamera e di tutti gli altri dati dei sensori registrati nel set di dati. Le cornici delle immagini della videocamera e i dati dei fotogrammi del sensore eliminati in questo modo non verranno rielaborati quando la sessione verrà ripresa di nuovo chiamando session.resume()
. Il monitoraggio AR della sessione è generalmente interessato dalla carenza di dati elaborati.
Java
// Configure the ARCore session.
Session session = new Session(context);
// Specify the previously recorded MP4 file.
Uri recordingUri = Uri.fromFile(new File(context.getFilesDir(), "recording.mp4"));
session.setPlaybackDatasetUri(recordingUri);
…
// Start playback from the beginning of the dataset.
session.resume();
…
// Pause the AR session, but silently continue MP4 playback. Camera frames
// and other recorded sensor data is discarded while the session is paused.
session.pause();
…
// Resume the AR session. Camera frames and other sensor data from the MP4
// that was silently played back while the session was paused is not
// processed by ARCore.
session.resume();
Kotlin
// Configure the ARCore session.
val session = Session(context)
// Specify the previously recorded MP4 file.
val recordingUri = Uri.fromFile(File(context.filesDir, "recording.mp4"))
session.playbackDatasetUri = recordingUri
…
// Start playback from the beginning of the dataset.
session.resume()
…
// Pause the AR session, but silently continue MP4 playback. Camera frames
// and other recorded sensor data is discarded while the session is paused.
session.pause()
…
// Resume the AR session. Camera frames and other sensor data from the MP4
// that was silently played back while the session was paused is not
// processed by ARCore.
session.resume()
Riavvia la riproduzione dall'inizio
Per riavviare una riproduzione dall'inizio del set di dati, metti in pausa la sessione e chiama session.setPlaybackDatasetUri()
, specificando la stessa registrazione MP4 prima di riprendere la sessione.
Java
session.pause();
// Pause and specify the SAME dataset:
session.setPlaybackDatasetUri(previousRecordingUri);
session.resume(); // Playback starts from the BEGINNING of the dataset.
Kotlin
session.pause()
// Pause and specify the SAME dataset:
session.playbackDatasetUri = previousRecordingUri
session.resume() // Playback starts from the BEGINNING of the dataset.
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.
Java
// Switch to a different dataset.
session.pause(); // Pause the playback of the first dataset.
// Specify a different dataset to use.
session.setPlaybackDatasetUri(newRecordingUri);
session.resume(); // Start playback from the beginning of the new dataset.
Kotlin
// Switch to a different dataset.
session.pause() // Pause the playback of the first dataset.
// Specify a different dataset to use.
session.playbackDatasetUri = newRecordingUri
session.resume() // Start playback from the beginning of the new dataset.
Controllare lo stato della riproduzione
Utilizza session.getPlaybackStatus()
in qualsiasi momento per determinare l'attuale
PlaybackStatus
.
Java
// Use any time to determine current PlaybackStatus.
if (session.getPlaybackStatus() != PlaybackStatus.OK) {
// Update the UI to show that the session playback has finished.
}
Kotlin
// Use any time to determine current PlaybackStatus.
if (session.playbackStatus != PlaybackStatus.OK) {
// Update the UI to show that the session playback has finished.
}
Passaggio successivo
- Scopri come aggiungere dati personalizzati alle sessioni registrate.
- Prova il codelab Introduzione all'API ARCore Recording and Playback.