A série A API Playback permite gravar dados de vídeo e RA uma vez em um determinado ambiente e usar esse conteúdo para substituir uma sessão de câmera ao vivo.
Pré-requisitos
Entenda os conceitos básicos de RA e como configurar uma sessão do ARCore antes de continuar.
Compatibilidade com outras APIs do ARCore
Devido à forma como os dados da sessão são processados, as APIs do ARCore podem produzir resultados durante a reprodução diferentes dos observados durante a gravação. Eles também podem produzir resultados diferentes durante as sessões de reprodução subsequentes. Por exemplo, o número de itens rastreáveis, o momento exato da detecção e as poses ao longo do tempo podem variar durante a reprodução.
Compatibilidade com a câmera compartilhada
As sessões que usam uma câmera compartilhada podem ser gravadas. No entanto, a reprodução dessas sessões usando o modo de câmera compartilhada não está disponível no momento.
Compatibilidade com o Cloud Anchors
Você pode hospedar e resolver Cloud Anchors enquanto grava ou reproduz uma sessão.
Gravação
Inicie, pare e verifique o status de uma gravação de sessão do ARCore.
Gravar uma sessão do ARCore
Para gravar uma sessão do ARCore, configure a sessão e forneça um URI MP4 para a gravação. Chame session.startRecording()
antes da primeira chamada para session.resume()
. A gravação começa automaticamente quando a sessão é retomada. Para interromper a gravação automaticamente quando a sessão for pausada, chame RecordingConfig.setAutoStopOnPause()
. Para gravar uma sessão parcial, chame session.startRecording()
enquanto a sessão estiver em execução.
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()
Parar uma gravação de sessão
Para interromper a gravação sem pausar a sessão de RA em execução, chame session.stopRecording()
.
Java
try {
session.stopRecording(); // Stop recording.
} catch (RecordingFailedException e) {
Log.e(TAG, "Failed to stop recording", e);
}
Kotlin
session.stopRecording()
Verificar o status da gravação
session.getRecordingStatus()
pode ser usado a qualquer momento para determinar o RecordingStatus
atual.
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.
}
Reprodução
Assistir sessões de RA gravadas anteriormente. As sessões são reproduzidas em tempo real, e a reprodução ou velocidade da sessão não pode ser ajustada.
Reproduzir uma sessão gravada anteriormente
Para reproduzir uma sessão gravada anteriormente, chame session.setPlaybackDatasetUri()
antes da primeira chamada para session.resume()
.
Depois que a reprodução for iniciada devido à primeira chamada para session.resume()
, pausar a sessão chamando session.pause()
vai suspender o processamento de todos os frames de imagem da câmera e de todos os outros dados de sensores gravados no conjunto de dados. Os frames de imagem da câmera e os dados de frames do sensor que são descartados dessa maneira não serão reprocessados quando a sessão for retomada novamente chamando session.resume()
. O monitoramento de RA da sessão geralmente é afetado devido à lacuna nos dados processados.
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()
Reiniciar a reprodução desde o início
Para reiniciar uma reprodução do início do conjunto de dados, pause a sessão e chame session.setPlaybackDatasetUri()
, especificando a mesma gravação MP4 antes de retomar a sessão.
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.
Reproduzir outra sessão
Para reproduzir um conjunto de dados diferente, pause a sessão e especifique o novo conjunto antes de retomar a sessão.
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.
Verificar o status de reprodução
Use session.getPlaybackStatus()
a qualquer momento para determinar o valor atual
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.
}
O que vem em seguida?
- Saiba como adicionar dados personalizados a sessões gravadas.
- Teste a Introdução à API ARCore Recording and Playback codelab.