Android को टारगेट करने वाले, एआर फ़ाउंडेशन की मदद से एआर सेशन रिकॉर्ड करके चलाएं

रिकॉर्डिंग और प्लेबैक एपीआई की मदद से, किसी एनवायरमेंट में एक बार वीडियो और एआर (ऑगमेंटेड रिएलिटी) का डेटा रिकॉर्ड किया जा सकता है. साथ ही, उस कॉन्टेंट का इस्तेमाल लाइव कैमरा सेशन की जगह लेने के लिए किया जा सकता है.

ज़रूरी शर्तें

आगे बढ़ने से पहले, पक्का करें कि आपने बुनियादी एआर (ऑगमेंटेड रिएलिटी) सिद्धांत और ARCore सेशन को कॉन्फ़िगर करने का तरीका समझ लिया है.

अन्य ARCore एपीआई के साथ काम करने की सुविधा

सेशन डेटा को जिस तरह प्रोसेस किया जाता है उसकी वजह से, रिकॉर्डिंग के दौरान देखे गए नतीजे की तुलना में ARCore API, वीडियो चलाने के दौरान अलग नतीजे दे सकता है. साथ ही, वीडियो चलाने के बाद के सेशन के दौरान भी, वे अलग-अलग नतीजे दे सकते हैं. उदाहरण के लिए, वीडियो चलाने के दौरान, ट्रैक किए जा सकने वाले डिवाइसों की संख्या, उनकी पहचान का सटीक समय, और समय के साथ उनके पोज़ अलग हो सकते हैं.

Cloud ऐंकर के साथ काम करने की सुविधा

किसी सेशन को रिकॉर्ड करते या चलाते समय, क्लाउड ऐंकर को होस्ट और ठीक किया जा सकता है.

रिकॉर्ड किया गया

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() को कॉल करें. साथ ही, सेशन फिर से शुरू करने से पहले, उसी MP4 रिकॉर्डिंग को रिकॉर्ड करें.

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

आगे क्या होगा