La API de Recording & Playback te permite grabar datos de video y de RA una vez en un entorno determinado y usar ese contenido para reemplazar la sesión de una cámara en vivo.
Requisitos previos
Asegúrate de comprender los conceptos fundamentales de RA y cómo configurar una sesión de ARCore antes de continuar.
Compatibilidad con otras APIs de ARCore
Debido a la forma en que se procesan los datos de la sesión, las APIs de ARCore pueden producir resultados diferentes durante la reproducción de los observados durante la grabación. También pueden producir resultados diferentes en sesiones de reproducción posteriores. Por ejemplo, la cantidad de elementos rastreables detectados, el momento preciso de su detección y sus poses con el tiempo pueden variar durante la reproducción.
Compatibilidad con Cloud Anchors
Puedes alojar y resolver Cloud Anchors mientras grabas o reproduces una sesión.
Grabación
Inicia, detén y verifica el estado de una grabación de una sesión de ARCore.
Graba una sesión de ARCore
Para grabar una sesión de ARCore, configúrala y proporciona un URI de MP4 para la grabación. Llama a ArSession_startRecording()
antes de la primera llamada a ArSession_resume()
. La grabación comienza automáticamente cuando se reanuda la sesión. Para detener la grabación automáticamente cuando se pause la sesión, llama a ArRecordingConfig_setAutoStopOnPause()
. Para grabar una sesión parcial, llama a ArSession_startRecording()
mientras se esté ejecutando la sesión.
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));
Detener una grabación
Para detener la grabación sin pausar la sesión de RA que se está ejecutando, llama a ArSession_stopRecording()
y ArRecordingConfig_destroy()
.
ArStatus status = ArSession_stopRecording(ar_session); ArRecordingConfig_destroy(recording_config);
Cómo comprobar el estado de la grabación
ArSession_getRecordingStatus()
se puede usar en cualquier momento para determinar el ArRecordingStatus
actual.
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. }
Reproducción
Reproduce sesiones de RA grabadas anteriormente. Las sesiones se reproducen en tiempo real y no se pueden ajustar la velocidad ni la reproducción de las sesiones.
Cómo reproducir una sesión grabada anteriormente
Para reproducir una sesión grabada previamente, llama a ArSession_setPlaybackDatasetUri()
antes de la primera llamada a ArSession_resume()
.
Una vez que haya comenzado la reproducción debido a la primera llamada a ArSession_resume()
, si pausas la sesión con una llamada a ArSession_pause()
, se suspenderá el procesamiento de todos los marcos de imagen de la cámara y cualquier otro dato de sensor registrado en el conjunto de datos. Los marcos de imagen de la cámara y los datos de fotogramas del sensor que se descarten de esta manera no se volverán a procesar cuando se reanude la sesión con una llamada a ArSession_resume()
. Por lo general, el seguimiento de RA de la sesión se verá afectado debido a la brecha en los datos procesados.
// 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));
Reiniciar la reproducción desde el principio
Para reiniciar una reproducción desde el comienzo del conjunto de datos, pausa la sesión y llama a ArSession_setPlaybackDatasetUri()
(especificando la misma grabación MP4) antes de reanudar la sesión.
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));
Reproducir otra sesión
Para reproducir un conjunto de datos diferente, pausa la sesión y especifica el conjunto de datos nuevo antes de reanudar la sesión.
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));
Cómo comprobar el estado de reproducción
Usa ArSession_getPlaybackStatus()
en cualquier momento para determinar el ArPlaybackStatus
actual.
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. }
¿Qué sigue?
- Obtén información sobre cómo agregar datos personalizados a las sesiones grabadas.