Kayıt ve Oynatma API'si, belirli bir ortamda video ve AR verilerini bir kez kaydetmenize ve bu içeriği canlı kamera oturumunun yerine kullanmanıza olanak tanır.
Ö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
Oturum verilerinin işlenme şekli nedeniyle ARCore API'leri, oynatma sırasında kayıt sırasında gözlemlenenden farklı sonuçlar üretebilir. Ayrıca, sonraki oynatma oturumlarında farklı sonuçlar da verebilirler. Örneğin, algılanan takip edilebilir öğelerin sayısı, algılanmalarının tam zamanlaması ve zaman içindeki duruşları oynatma sırasında farklı olabilir.
Cloud Anchors ile uyumluluk
Oturum kaydederken veya oynatırken Bulut Yer İşaretleri barındırabilir ve çözebilirsiniz.
Kayıt
ARCore oturumu kaydını başlatma, durdurma ve durumunu kontrol etme.
ARCore oturumu kaydetme
ARCore oturumunu kaydetmek için oturumu yapılandırın ve kayıt için bir MP4 URI sağlayın. Oturuma devam etmeden önce ARRecordingManager.StartRecording()
numaralı telefonu arayın. Oturum devam ettirildiğinde kayıt otomatik olarak başlar. Oturum duraklatıldığında kaydı otomatik olarak durdurmak için ARRecordingConfig.AutoStopOnPause
simgesini tıklayın. Oturumun bir kısmını kaydetmek için oturum devam ederken ARRecordingManager.StartRecording()
tuşuna bası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
Devam eden AR oturumunu duraklatmadan kaydı durdurmak için ARRecordingManager.StopRecording()
simgesini çağırın.
recordingManager.StopRecording();
Kayıt durumunu kontrol etme
ARRecordingManager.RecordingStatus
, mevcut kayıt durumunu belirlemek için dilediğiniz zaman kullanılabilir.
Debug.Log("Current Recording Status: " + recordingManager.RecordingStatus);
Oynatma
Daha önce kaydedilmiş AR oturumlarını oynatma Oturumlar gerçek zamanlı olarak oynatılır ve oturum oynatma veya hızı ayarlanamaz.
Daha önce kaydedilmiş bir oturumu oynatma
Daha önce kaydedilmiş bir oturumu oynatmak için ARPlaybackManager.SetPlaybackDatasetUri()
işlevini çağırın ve oynatmak istediğiniz veri kümesinin URI'sini 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.
Oynatma, oturum devam ettirildiği için başladıktan sonra ARSession
devre dışı bırakılarak oturum duraklatıldığında, tüm kamera görüntü çerçevelerinin ve veri kümesinde kayıtlı diğer sensör verilerinin işlenmesi askıya alınır. Bu şekilde atlanan kamera görüntü çerçeveleri ve sensör çerçevesi verileri, oturum devam ettirilerek tekrar başlatıldığında yeniden işlenmez. Oturum için AR izleme, genellikle işlenen verilerdeki boşluk nedeniyle olumsuz etkilenir.
// 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ılarının ErrorPlaybackFailed
döndürdüğü bilinen bir sorun vardır.
Bunun nedeni, bir oturumun duraklatılmasının birkaç kare sürmesidir. ARPlaybackManager.SetPlaybackDatasetUri()
, oturum duraklatılmadan önce çağrılırsa oturuma erişemez ve hata döndürür.
Aşağıdaki kod, geçici çözüm olarak 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.
}
}
...
}
Oynatma işlemini durdurma
Bir oynatmayı durdurmak için ARPlaybackManager.SetPlaybackDatasetUri()
işlevini ç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şlatma
Bir oynatmayı veri kümesinin başından itibaren yeniden başlatmak için ARPlaybackManager.SetPlaybackDatasetUri()
işlevini çağırı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 oturumu oynatma
Farklı bir veri kümesini oynatmak için oturumu duraklatın ve oturumu devam ettirmeden önce 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
ARPlaybackManager.PlaybackStatus
mevcut oynatma durumunu belirlemek için dilediğiniz zaman kullanılabilir.
Debug.Log("Current Playback Status: " + playbackManager.PlaybackStatus);
Sırada ne var?
- Kayıtlı oturumlara nasıl özel veri ekleyeceğinizi öğrenin.