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 fundamentais 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 posições deles ao longo do tempo podem variar durante a reprodução.
Compatibilidade com o Cloud Anchors
Você pode hospedar e resolver Cloud Anchors ao gravar ou reproduzir 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 ArSession_startRecording()
antes da primeira chamada para ArSession_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 ArRecordingConfig_setAutoStopOnPause()
. Para gravar uma sessão parcial, chame ArSession_startRecording()
enquanto a sessão estiver em execução.
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));
Parar uma gravação
Para interromper a gravação sem pausar a sessão de RA em execução, chame
ArSession_stopRecording()
e ArRecordingConfig_destroy()
.
ArStatus status = ArSession_stopRecording(ar_session); ArRecordingConfig_destroy(recording_config);
Verificar o status da gravação
ArSession_getRecordingStatus()
pode ser usado a qualquer momento para determinar o ArRecordingStatus
atual.
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. }
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
ArSession_setPlaybackDatasetUri()
antes da primeira chamada para
ArSession_resume()
Quando a reprodução começar devido à primeira chamada para ArSession_resume()
, pausar a sessão chamando ArSession_pause()
vai suspender o processamento de todos os frames de imagem da câmera e todos os outros dados do sensor 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 são reprocessados quando a sessão é retomada novamente chamando ArSession_resume()
. O monitoramento de RA da sessão geralmente é afetado devido à lacuna nos dados processados.
// 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 a reprodução desde o início
Para reiniciar uma reprodução desde o início do conjunto de dados, pause a sessão e
ligar
ArSession_setPlaybackDatasetUri()
,
especificando a mesma gravação em MP4 antes de retomar a sessão.
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));
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.
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));
Verificar o status de reprodução
Usar
ArSession_getPlaybackStatus()
a qualquer momento para determinar o valor atual
ArPlaybackStatus
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. }
O que vem em seguida?
- Saiba como adicionar dados personalizados a sessões gravadas.