Android NDK'da AR oturumu kaydetme ve oynatma

Kaydetme ve Oynatma API'si, video ve AR verilerini belirli bir ortamda bir kez kaydetmenizi ve bu içeriği bir canlı kamera oturumunun yerine kullanmanızı sağlar.

Ön koşullar

Devam etmeden önce temel AR kavramlarını ve ARCore oturumunu nasıl yapılandıracağınızı anladığınızdan emin olun.

Diğer ARCore API'leriyle uyumluluk

ARCore API'leri, oturum verilerinin işlenme şekli nedeniyle oynatma sırasında kayıt sırasında gözlemlenenden farklı sonuçlar üretebilir. Sonraki oynatma oturumlarında da farklı sonuçlar üretebilirler. Örneğin, algılanan izlenebilirlerin sayısı, algılanma zamanının tam zamanı ve pozları, oynatma sırasında zaman içinde farklı olabilir.

Cloud Anchor'larla uyumluluk

Cloud Anchor'ı, bir oturum kaydederken veya oynatırken barındırabilir ve çözebilirsiniz.

Kayıt

ARCore oturum kaydını başlatabilir, durdurabilir ve durumunu kontrol edebilirsiniz.

ARCore oturumu kaydet

ARCore oturumu kaydetmek için oturumu yapılandırın ve kayıt için bir MP4 URI'si sağlayın. ArSession_resume() numaralı telefona yapılan ilk aramadan önce ArSession_startRecording() numaralı telefonu arayın. Kayıt, oturum devam ettiğinde otomatik olarak başlar. Oturum duraklatıldığında kaydı otomatik olarak durdurmak için ArRecordingConfig_setAutoStopOnPause() numaralı telefonu arayın. Kısmi bir oturumu kaydetmek için oturum devam ederken ArSession_startRecording() numaralı telefonu arayı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));

Kaydı durdurma

Şu anda çalışan AR oturumunu duraklatmadan kaydı durdurmak için ArSession_stopRecording() ve ArRecordingConfig_destroy() numaralı telefonu arayın.

ArStatus status = ArSession_stopRecording(ar_session);
ArRecordingConfig_destroy(recording_config);

Kayıt durumunu kontrol edin

ArSession_getRecordingStatus(), geçerli ArRecordingStatus değerini belirlemek için herhangi bir zamanda kullanılabilir.

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.
}

Oynatma

Önceden kaydedilmiş AR oturumlarını oynatın. Oturumlar gerçek zamanlı olarak oynatılır. Oturum oynatma veya hız ayarlanamaz.

Önceden kaydedilmiş bir oturumu tekrar oynatma

Önceden kaydedilmiş bir oturumu oynatmak için ilk ArSession_resume() çağrısından önce ArSession_setPlaybackDatasetUri() numaralı telefonu arayın.

ArSession_resume()'e yapılan ilk çağrı nedeniyle oynatma başladıktan sonra, ArSession_pause() çağrısı yapılarak oturum duraklatıldığında, tüm kamera görüntüsü karelerinin ve veri kümesinde kayıtlı diğer sensör verilerinin işlenmesini askıya alınır. Bu şekilde silinen kamera görüntü çerçeveleri ve sensör çerçevesi verileri, ArSession_resume() çağrısı yapılarak oturum tekrar devam ettirildiğinde yeniden işlenmez. Oturumla ilgili AR takibi genellikle işlenen verilerdeki boşluktan dolayı sorun yaşar.

// 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));

Oynatmayı baştan başlat

Bir oynatmayı veri kümesinin başından yeniden başlatmak için oturumu devam ettirmeden önce oturumu duraklatın ve aynı MP4 kaydını belirterek ArSession_setPlaybackDatasetUri() araması yapı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));

Farklı bir oturum oynat

Farklı bir veri kümesini oynatmak için oturumu devam ettirmeden önce oturumu duraklatın ve yeni veri kümesini belirtin.

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));

Oynatma durumunu kontrol etme

Mevcut ArPlaybackStatus sürümünü belirlemek için istediğiniz zaman ArSession_getPlaybackStatus() aracını kullanabilirsiniz.

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.
}

Sonraki adımlar