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 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 la videocamera condivisa
È possibile registrare le sessioni che utilizzano la Videocamera condivisa. Tuttavia, la riproduzione di queste sessioni con la modalità Fotocamera condivisa non è al momento disponibile.
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 di una registrazione di una sessione ARCore.
Registrare una sessione ARCore
Per registrare una sessione ARCore, configurala e fornisci un URI MP4 per la registrazione. Chiama 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 viene sospesa, chiama 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 mettere in pausa la sessione AR attualmente in esecuzione, chiama 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à delle sessioni non possono essere regolate.
Riprodurre una sessione registrata in precedenza
Per riprodurre una sessione registrata in precedenza, chiama session.setPlaybackDatasetUri()
prima della prima chiamata al numero session.resume()
.
Una volta avviata la riproduzione a causa della prima chiamata a session.resume()
, la sospensione della sessione chiamando session.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 session.resume()
. Il monitoraggio AR per la sessione in genere ne risente a causa della 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 lo stato 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.
}
Passaggi successivi
- Scopri come aggiungere dati personalizzati alle sessioni registrate.
- Prova l'introduzione all'API ARCore Recording and Riproduzione codelab.