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. Oturumu devam ettirmeden önce ARRecordingManager.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.AutoStopOnPause
numaralı telefonu arayın. Kısmi bir oturumu kaydetmek için oturum devam ederken ARRecordingManager.StartRecording()
numaralı telefonu arayın.
ARCoreRecordingConfig recordingConfig = ScriptableObject.CreateInstance<ARCoreRecordingConfig>();
Uri datasetUri = new System.Uri("file:///uri/for/dataset.mp4");
recordingConfig.Mp4DatasetUri = datasetUri.AbsoluteUri;
recordingManager.StartRecording(recordingConfig);
Oturum kaydını durdurma
Şu anda çalışan AR oturumunu duraklatmadan kaydı durdurmak için ARRecordingManager.StopRecording()
numaralı telefonu arayın.
recordingManager.StopRecording();
Kayıt durumunu kontrol edin
ARRecordingManager.RecordingStatus
aracını, geçerli kayıt durumunu belirlemek için istediğiniz zaman kullanabilirsiniz.
Debug.Log("Current Recording Status: " + recordingManager.RecordingStatus);
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 oynatma
Daha önce kaydedilmiş bir oturumu oynatmak için ARPlaybackManager.SetPlaybackDatasetUri()
çağrısı yapın ve oynatmak istediğiniz veri kümesine ait bir URI sağlayın. Bu yöntemi kullanmak için oturumu duraklatmanız gerekir. Değişikliğin geçerli olması için oturumu devam ettirin.
Oturum devam ettirilmesi nedeniyle oynatma başladıktan sonra, ARSession
hizmetini devre dışı bırakarak oturumu duraklatmak, tüm kamera görüntü karelerinin ve veri kümesinde kayıtlı diğer sensör verilerinin işlenmesini askıya alır. Bu şekilde silinen kamera görüntü çerçeveleri ve sensör çerçevesi verileri, oturum devam ettirilerek tekrar devam ettirildiğinde yeniden işlenmez. Oturumla ilgili AR takibi genellikle işlenen verilerdeki boşluktan dolayı sorun yaşar.
// Disable the ARSession to pause the current AR session.
session.enabled = false;
// In the next frame, provide a URI for the dataset you wish to play back.
Uri datasetUri = new System.Uri("file:///uri/for/dataset.mp4");
playbackManager.SetPlaybackDatasetUri(datasetUri);
// In the frame after that, re-enable the ARSession to resume the session from
// the beginning of the dataset.
session.enabled = true;
Bilinen sorun ve geçici çözüm
ARPlaybackManager.SetPlaybackDatasetUri()
çağrısının ErrorPlaybackFailed
yapılmasıyla ilgili bilinen bir sorun vardır.
Bunun nedeni, bir oturumun duraklatılmasının birkaç kare sürebilmesidir. ARPlaybackManager.SetPlaybackDatasetUri()
oturum duraklatılmadan önce çağrılırsa oturuma erişemez, bu nedenle bir hata döndürür.
Geçici bir çözüm olarak aşağıdaki kod kullanılabilir.
// Workaround for known issue where `playbackManager.SetPlaybackDatasetUri()`
// returns `ErrorPlaybackFailed` because it can take several frames for a
// session to be paused.
// Reference to the ARSession component in the scene.
ARSession session;
void PlaybackDataset()
{
setPlaybackDataset = true;
// Pause the current AR session.
session.enabled = false;
// Set a timeout for retrying playback retrieval.
timeout = 10f;
}
// Next frame
void Update()
{
...
if (setPlaybackDataset)
{
PlaybackResult result = playbackManager.SetPlaybackDatasetUri(datasetUri);
if (result == PlaybackResult.ErrorPlaybackFailed || result == PlaybackResult.SessionNotReady)
{
// Try to set the dataset again in the next frame.
timeout -= Time.deltaTime;
}
else
{
// Do not set the timeout if the result is something other than ErrorPlaybackFailed.
timeout = -1f;
}
if (timeout < 0.0f)
{
setPlaybackDataset = false;
// If playback is successful, proceed as usual.
// If playback is not successful, handle the error appropriately.
}
}
...
}
Oynatmayı durdurma
Oynatmayı durdurmak için ARPlaybackManager.SetPlaybackDatasetUri()
yöntemini çağırın ve veri kümesi URI'sini null
olarak ayarlayın.
// Disable the ARSession to pause the current AR session.
session.enabled = false;
// In the next frame, unset the playback dataset URI.
playbackManager.SetPlaybackDatasetUri(null);
// In the frame after that, re-enable the ARSession to resume the session using
// the device camera and other sensors.
session.enabled = true;
Oynatmayı baştan başlat
Bir oynatmayı veri kümesinin başından yeniden başlatmak için ARPlaybackManager.SetPlaybackDatasetUri()
numaralı telefonu arayın ve oturumu devam ettirmeden önce aynı MP4 kaydını belirtin.
// Disable the ARSession to pause the current AR session.
session.enabled = false;
// In the next frame, specify the same dataset URI.
playbackManager.SetPlaybackDatasetUri(datasetUri); // Same URI that was previously set.
// In the frame after that, re-enable the ARSession to resume the session from
// the beginning of the dataset.
session.enabled = true;
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.
// Disable the ARSession to pause the current AR session.
session.enabled = false;
// In the next frame, specify a new dataset URI.
Uri newDatasetUri = new System.Uri("file:///uri/for/different/dataset.mp4");
playbackManager.SetPlaybackDatasetUri(newDatasetUri); // Different URI than was previously set.
// In the frame after that, re-enable the ARSession to resume the session from
// the beginning of the new dataset.
session.enabled = true;
Oynatma durumunu kontrol etme
Mevcut oynatma durumunu belirlemek için istediğiniz zaman ARPlaybackManager.PlaybackStatus
kullanılabilir.
Debug.Log("Current Playback Status: " + playbackManager.PlaybackStatus);
Sonraki adımlar
- Kayıtlı oturumlara nasıl özel veriler ekleyeceğinizi öğrenin.