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

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

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

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

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

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

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_resume() पर किए गए पहले कॉल से पहले ArSession_setPlaybackDatasetUri() को कॉल करें.

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

वीडियो को शुरुआत से रीस्टार्ट करना

डेटासेट की शुरुआत से प्लेबैक रीस्टार्ट करने के लिए, सेशन को फिर से शुरू करने से पहले, उसी MP4 रिकॉर्डिंग के बारे में बताते हुए सेशन और कॉल ArSession_setPlaybackDatasetUri() को रोकें.

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

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

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

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.
}

आगे क्या होगा