Android NDK पर एआर सेशन रिकॉर्ड करें और चलाएं

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

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

पक्का करें कि आपको एआर के बुनियादी सिद्धांतों के बारे में पता हो साथ ही, आगे बढ़ने से पहले ARCore सेशन को कॉन्फ़िगर करने का तरीका जानें.

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

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

Cloud Anchors के साथ काम करता है या नहीं

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

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

ARCore सेशन की रिकॉर्डिंग शुरू करें, बंद करें, और उसकी स्थिति देखें.

ARCore सेशन रिकॉर्ड करें

ARCore सेशन को रिकॉर्ड करने के लिए, सेशन को कॉन्फ़िगर करें और रिकॉर्डिंग के लिए MP4 यूआरआई उपलब्ध कराएं. ArSession_resume() पर पहला कॉल करने से पहले ArSession_startRecording() पर कॉल करें. सेशन के फिर से शुरू होने पर, रिकॉर्डिंग अपने-आप शुरू हो जाती है. सेशन के रुक जाने पर, रिकॉर्डिंग अपने-आप बंद हो जाए, इसके लिए ArRecordingConfig_setAutoStopOnPause() पर कॉल करें. किसी खास सेशन को रिकॉर्ड करने के लिए, सेशन के चलने के दौरान ArSession_startRecording() पर कॉल करें.

ArRecordingConfig* recording_config = nullptr;
ArRecordingConfig_create(ar_session, &recording_config);
ArRecordingConfig_setMp4DatasetUri(ar_session, recording_config,
                                   mp4_dataset_uri);
ArRecordingConfig_setAutoStopOnPause(ar_session, recording_config, true);

CHECK(ArSession_startRecording(ar_session, recording_config));
// …
// Resume ARCore session to start recording.
CHECK(ArSession_resume(ar_session));
// …
// Recording ends.
CHECK(ArSession_pause(ar_session));

रिकॉर्डिंग बंद करना

अभी चल रहे एआर सेशन को रोके बिना रिकॉर्डिंग बंद करने के लिए, कॉल करें ArSession_stopRecording() और ArRecordingConfig_destroy().

ArStatus status = ArSession_stopRecording(ar_session);
ArRecordingConfig_destroy(recording_config);

रिकॉर्डिंग की स्थिति देखें

ArSession_getRecordingStatus() वर्तमान ArRecordingStatus का पता लगाने के लिए किसी भी समय इस्तेमाल किया जा सकता है.

ArRecordingStatus recording_status;
// Can be called at any time.
ArSession_getRecordingStatus(ar_session, &recording_status);
if (recording_status == AR_RECORDING_NONE) {
  // The dataset recorder is not recording.
} else if (recording_status == AR_RECORDING_OK) {
  // The dataset recorder is recording normally.
} else if (recording_status == AR_RECORDING_IO_ERROR) {
  // The dataset recorder encountered an error while recording.
}

वीडियो चलाएं

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

पहले से रिकॉर्ड किए गए सेशन को फिर से चलाना

पहले से रिकॉर्ड किए गए सेशन को फिर से चलाने के लिए, कॉल करें ArSession_setPlaybackDatasetUri() कॉल करने से पहले ArSession_resume().

ArSession_resume() को पहली बार कॉल करने की वजह से वीडियो चलना शुरू होने के बाद, ArSession_pause() को कॉल करके सेशन को रोकने से डेटासेट में सभी कैमरा इमेज फ़्रेम और रिकॉर्ड किए गए सेंसर डेटा की प्रोसेसिंग निलंबित हो जाएगी. इस तरीके से खारिज किए गए कैमरा इमेज फ़्रेम और सेंसर फ़्रेम के डेटा को फिर से प्रोसेस नहीं किया जाएगा. ऐसा तब किया जाएगा, जब सेशन को फिर से शुरू करने के लिए, ArSession_resume() को कॉल किया जाएगा. आम तौर पर, प्रोसेस किए गए डेटा में अंतर की वजह से सेशन के लिए एआर ट्रैकिंग खराब होगी.

// Specify previously recorded MP4 file.
CHECK(ArSession_setPlaybackDatasetUri(ar_session, mp4_dataset_uri));
// …
// Playback starts from the beginning of the dataset.
CHECK(ArSession_resume(ar_session));
// …
// Pause AR session, but allow playback to silently continue.
CHECK(ArSession_pause(ar_session));
// …
// Resume AR session. Playback continues with gap to paused session.
CHECK(ArSession_resume(ar_session));

वीडियो को फिर से चलाना

डेटासेट की शुरुआत से वीडियो चलाने के लिए, सेशन को रोकें और कॉल करें ArSession_setPlaybackDatasetUri() उसमें वही MP4 रिकॉर्डिंग जोड़ें.

CHECK(ArSession_pause(ar_session));
// Pause and specify the *same* dataset:
CHECK(ArSession_setPlaybackDatasetUri(ar_session, mp4_dataset_uri));
// Playback starts from the *beginning* of the dataset.
CHECK(ArSession_resume(ar_session));

कोई दूसरा सेशन फिर से चलाएं

कोई दूसरा डेटासेट चलाने के लिए, सेशन रोकें और नया डेटासेट डालें उसे दोबारा शुरू करने से पहले.

CHECK(ArSession_pause(ar_session));
// Pause and specify a *different* dataset:
CHECK(ArSession_setPlaybackDatasetUri(ar_session, other_mp4_dataset_uri));
// Playback starts from the *beginning* of the new dataset.
CHECK(ArSession_resume(ar_session));

वीडियो चलाने की स्थिति देखना

इस्तेमाल की जाने वाली चीज़ें मौजूदा ट्रैफ़िक का पता लगाने के लिए, किसी भी समय ArSession_getPlaybackStatus() ArPlaybackStatus.

ArPlaybackStatus playback_status;
// Can be called at any time.
ArSession_getPlaybackStatus(ar_session, &playback_status);
if (playback_status == AR_PLAYBACK_NONE) {
  // The session is not playing back an MP4 dataset file.
} else if (playback_status == AR_PLAYBACK_OK) {
  // Playback is in process without issues.
} else if (playback_status == AR_PLAYBACK_IO_ERROR) {
  // Playback has stopped due to an error.
} else if (playback_status == AR_PLAYBACK_FINISHED) {
  // Playback has finished successfully.
}

आगे क्या होगा