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

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

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

आगे बढ़ने से पहले, पक्का करें कि आपने एआर के बुनियादी कॉन्सेप्ट और 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() पर कॉल करें और सेशन को फिर से शुरू करने से पहले, वही 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);

अब क्या होगा