रिकॉर्डिंग और प्लेबैक एपीआई की मदद से, किसी खास माहौल में एक बार वीडियो और एआर डेटा रिकॉर्ड किया जा सकता है. साथ ही, उस कॉन्टेंट का इस्तेमाल करके लाइव कैमरा सेशन को बदला जा सकता है.
ज़रूरी शर्तें
आगे बढ़ने से पहले, पक्का करें कि आपने एआर के बुनियादी कॉन्सेप्ट और ARCore सेशन को कॉन्फ़िगर करने का तरीका समझ लिया हो.
अन्य ARCore एपीआई के साथ काम करना
सेशन डेटा को प्रोसेस करने के तरीके की वजह से, ARCore API रिकॉर्डिंग के दौरान मिले नतीजों के मुकाबले, वीडियो चलाने के दौरान अलग नतीजे दे सकते हैं. वीडियो चलाने के बाद के सेशन में भी, अलग-अलग नतीजे मिल सकते हैं. उदाहरण के लिए, वीडियो चलाने के दौरान, ट्रैक किए गए आइटम की संख्या, उनके ट्रैक होने का सटीक समय, और समय के साथ उनके पोज़ अलग-अलग हो सकते हैं.
Cloud Anchors के साथ काम करने की सुविधा
सेशन रिकॉर्ड करते समय या उसे चलाते समय, क्लाउड ऐंकर होस्ट किए जा सकते हैं और उन्हें ठीक किया जा सकता है.
रिकॉर्डिंग
ARCore सेशन की रिकॉर्डिंग शुरू करना, बंद करना, और उसका स्टेटस देखना.
ARCore सेशन रिकॉर्ड करना
ArCore सेशन रिकॉर्ड करने के लिए, सेशन को कॉन्फ़िगर करें और रिकॉर्डिंग के लिए MP4 यूआरआई दें. सेशन फिर से शुरू करने से पहले, ARRecordingManager.StartRecording()
को कॉल करें. सेशन फिर से शुरू होने पर, रिकॉर्डिंग अपने-आप शुरू हो जाती है. सेशन रोकने पर रिकॉर्डिंग अपने-आप बंद हो जाए, इसके लिए ARRecordingConfig.AutoStopOnPause
बोलें. सेशन का कुछ हिस्सा रिकॉर्ड करने के लिए, सेशन के दौरान ARRecordingManager.StartRecording()
को कॉल करें.
ARCoreRecordingConfig recordingConfig = ScriptableObject.CreateInstance<ARCoreRecordingConfig>();
Uri datasetUri = new System.Uri("file:///uri/for/dataset.mp4");
recordingConfig.Mp4DatasetUri = datasetUri.AbsoluteUri;
recordingManager.StartRecording(recordingConfig);
सेशन की रिकॉर्डिंग बंद करना
चल रहे एआर सेशन को रोके बिना रिकॉर्डिंग बंद करने के लिए, ARRecordingManager.StopRecording()
को कॉल करें.
recordingManager.StopRecording();
रिकॉर्डिंग की स्थिति देखना
रिकॉर्डिंग की मौजूदा स्थिति जानने के लिए, ARRecordingManager.RecordingStatus
का इस्तेमाल कभी भी किया जा सकता है.
Debug.Log("Current Recording Status: " + recordingManager.RecordingStatus);
वीडियो चलाएं
पहले से रिकॉर्ड किए गए एआर सेशन चलाना. सेशन रीयल टाइम में चलते हैं. साथ ही, सेशन के चलने की स्पीड में बदलाव नहीं किया जा सकता.
पहले रिकॉर्ड किए गए सेशन को चलाना
पहले से रिकॉर्ड किए गए सेशन को चलाने के लिए, ARPlaybackManager.SetPlaybackDatasetUri()
को कॉल करें और उस डेटासेट का यूआरआई दें जिसे चलाना है. इस तरीके का इस्तेमाल करने के लिए, आपको सेशन को रोकना होगा. बदलाव लागू करने के लिए, सेशन फिर से शुरू करें.
सेशन फिर से शुरू होने की वजह से वीडियो चलने के बाद,ARSession
को बंद करके सेशन रोकने पर, डेटासेट में मौजूद कैमरे के सभी इमेज फ़्रेम और रिकॉर्ड किए गए सेंसर डेटा को प्रोसेस करना रोक दिया जाएगा. इस तरह से हटाए गए कैमरे के इमेज फ़्रेम और सेंसर फ़्रेम के डेटा को, सेशन को फिर से शुरू करने पर फिर से प्रोसेस नहीं किया जाएगा. प्रोसेस किए गए डेटा में अंतर की वजह से, आम तौर पर सेशन के लिए एआर ट्रैकिंग पर असर पड़ेगा.
// 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;
पहले से मालूम समस्या और उसे हल करने का तरीका
एक समस्या है, जिसमें ARPlaybackManager.SetPlaybackDatasetUri()
पर किए गए कॉल, ErrorPlaybackFailed
पर वापस आ जाते हैं.
ऐसा इसलिए होता है, क्योंकि किसी सेशन को रोकने में कई फ़्रेम लग सकते हैं. अगर सेशन को रोकने से पहले ARPlaybackManager.SetPlaybackDatasetUri()
को कॉल किया जाता है, तो यह सेशन को ऐक्सेस नहीं कर पाएगा. इसलिए, यह गड़बड़ी का मैसेज दिखाएगा.
इस कोड का इस्तेमाल, समस्या को हल करने के लिए किया जा सकता है.
// 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.
}
}
...
}
वीडियो चलाना बंद करना
वीडियो चलाना बंद करने के लिए, ARPlaybackManager.SetPlaybackDatasetUri()
को कॉल करें और डेटासेट यूआरआई को null
पर सेट करें.
// 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;
वीडियो को शुरुआत से फिर से चलाना
डेटासेट की शुरुआत से वीडियो चलाने के लिए, ARPlaybackManager.SetPlaybackDatasetUri()
को कॉल करें. इसके बाद, सेशन को फिर से शुरू करने से पहले, उसी एमपी4 रिकॉर्डिंग को चुनें.
// 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;
कोई दूसरा सेशन चलाना
कोई दूसरा डेटासेट चलाने के लिए, सेशन को रोकें और सेशन को फिर से शुरू करने से पहले, नया डेटासेट चुनें.
// 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;
वीडियो चलाने की स्थिति देखना
ARPlaybackManager.PlaybackStatus
का इस्तेमाल किसी भी समय, वीडियो चलाने की मौजूदा स्थिति का पता लगाने के लिए किया जा सकता है.
Debug.Log("Current Playback Status: " + playbackManager.PlaybackStatus);
अब क्या होगा
- रिकॉर्ड किए गए सेशन में कस्टम डेटा जोड़ने का तरीका जानें.