Android NDK पर रिकॉर्डिंग करते समय कस्टम डेटा जोड़ना

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

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

कस्टम डेटा के लिए उपयोग के उदाहरण

रिकॉर्डिंग में अपनी पसंद के मुताबिक डेटा जोड़ने से, आपके एआर ऐप्लिकेशन का इस्तेमाल करना ज़्यादा आसान हो जाता है. नीचे कुछ खास इस्तेमाल के उदाहरण दिए गए हैं.

एआर का इस्तेमाल कभी भी, कहीं भी करने के लिए

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

एआर (ऑगमेंटेड रिएलिटी) के अनुभव को साथ मिलकर तैयार करें

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

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

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

कस्टम डेटा के साथ रिकॉर्ड करें

कस्टम डेटा की मदद से सेशन रिकॉर्डिंग बनाएं.

कस्टम डेटा के साथ रिकॉर्डिंग शुरू करें

पसंद के मुताबिक डेटा के साथ रिकॉर्डिंग शुरू करने के लिए इन चरणों का पालन करें. रिकॉर्डिंग सेशन को शुरू करने, बंद करने, और उसकी जांच करने के लिए, कृपया एआर सेशन को रिकॉर्ड करना और चलाना देखें.

  1. ArRecordingConfig पाएं.
  2. पसंद के मुताबिक बनाए गए यूयूआईडी का इस्तेमाल करके, नया ArTrack बनाएं. सभी कस्टम डेटा यहां सेव किया जाएगा.
  3. सेशन कॉन्फ़िगरेशन के दौरान बनाए गए ArRecordingConfig में ArTrack जोड़ें.
// Initialize a new track with a custom UUID.
// Make sure to save the UUID because it is the ID that you will use to get
// your data back during playback.
ArTrack* track = NULL;
ArTrack_create(ar_session, &track);
// String from UUID generator: de5ec7a4-09ec-4c48-b2c3-a98b66e71893
uint8_t uuid_byte_array[16] = {0xde, 0x5e, 0xc7, 0xa4, 0x09, 0xec,
                               0x4c, 0x48, 0xb2, 0xc3, 0xa9, 0x8b,
                               0x66, 0xe7, 0x18, 0x93};
ArTrack_setId(ar_session, track, uuid_byte_array);

// Add the ArTrack to the recording_config.
// recording_config must already be configured.
ArRecordingConfig_addTrack(ar_session, recording_config, track);
ArTrack_destroy(track);

सभी नए ट्रैक को अलग-अलग रिकॉर्डिंग माना जाता है और रिकॉर्ड किए गए हर ट्रैक का अपना यूयूआईडी होता है.

ज़रूरी नहीं: अतिरिक्त डेटा के साथ ट्रैक को कॉन्फ़िगर करें

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

// Set additional data on this track.
// For example, describe where you recorded the session.
uint8_t metadata_size = 4;
uint8_t metadata[5] = "HOME";
ArTrack_setMetadata(ar_session, track, metadata, metadata_size);

ज़रूरी नहीं: MIME टाइप के साथ ट्रैक को कॉन्फ़िगर करें

अगर आपके ऐप्लिकेशन को बाहरी टूल के साथ काम करना ज़रूरी है, तो MIME टाइप वाला ट्रैक कॉन्फ़िगर किया जा सकता है. इससे, ट्रैक में रिकॉर्ड किए गए डेटा के बारे में जानकारी मिलती है. अगर आप यह नहीं बताते हैं कि डेटा किस तरह का है, तो डेटा को application/text की कैटगरी में डाल दिया जाएगा. डेटा पढ़ते समय ARCore, MIME टाइप को अनदेखा कर देता है.

// Set a MIME type for compatibility with external tools.
ArTrack_setMimeType(ar_session, track, "text/csv");

कस्टम डेटा ट्रैक रिकॉर्ड करें

सभी कस्टम ट्रैक डेटा ArFrame पर रिकॉर्ड किया जाता है. एआर (ऑगमेंटेड रिएलिटी) सेशन में फ़्रेम पाने के लिए, ArSession_update() का इस्तेमाल किया जाता है. किसी फ़्रेम पर डेटा रिकॉर्ड करने का समय, प्लेबैक के दौरान दिखाए जाने वाले समय के बराबर ही होता है. उदाहरण के लिए, अगर ArFrame_recordTrackData() को 00:07:02 पर “A” वैल्यू के साथ कॉल किया जाता है, तो ट्रैक चलाने पर, आपको 00:07:02 के निशान पर “A” वापस मिल जाएगा.

पसंद के मुताबिक डेटा ट्रैक रिकॉर्ड करने के लिए, ArFrame_recordTrackData() पर कॉल करें.

// Place an AR lamp in a room.
if (place_lamp_button_was_pressed) {
  uint8_t lamp_data[1] = {lamp_id};
  ArFrame_recordTrackData(ar_session, frame, uuid_byte_array, lamp_data,
                          /*payload_size=*/1);
}

कस्टम डेटा ट्रैक चलाएं

वीडियो चलने के दौरान, सेशन की रिकॉर्डिंग से कस्टम डेटा एक्सट्रैक्ट करना.

प्लेबैक शुरू करें

कस्टम डेटा के साथ वीडियो चलाना शुरू करना, किसी सामान्य सेशन की रिकॉर्डिंग को शुरू करने जैसा ही है.

पसंद के मुताबिक डेटा दिखाएं

ArFrame पर रिकॉर्ड किया गया कस्टम डेटा वापस पाने के लिए, ArFrame_getUpdatedTrackData() को कॉल करें. एक ही फ़्रेम से कई ट्रैक का डेटा फिर से हासिल किया जा सकता है. उदाहरण के लिए, अगर आपने रिकॉर्डिंग के दौरान एक ही फ़्रेम पर दो बार ArFrame_recordTrackData() कॉल किया, तो आपको वीडियो चलने के दौरान ArTrackData के दो इंस्टेंस मिलेंगे.

// Create the container to hold the track data retrieved from the frame.
ArTrackDataList* fetched_track_data_list;
ArTrackDataList_create(ar_session, &fetched_track_data_list);

// Fetch the track data from the frame into the created container.
ArFrame_getUpdatedTrackData(ar_session, frame, uuid_byte_array,
                            fetched_track_data_list);

जब ArTrackData किसी कंटेनर ऑब्जेक्ट में हो, तो कस्टम डेटा की बाइट निकालें.

// Fetch the size of the track data list.
int32_t fetched_track_data_list_size;
ArTrackDataList_getSize(ar_session, fetched_track_data_list,
                        &fetched_track_data_list_size);

// Iterate through the list.
for (int i = 0; i < fetched_track_data_list_size; i++) {
  ArTrackData* fetched_track_data;
  ArTrackDataList_acquireItem(ar_session, fetched_track_data_list, i,
                              &fetched_track_data);
  // Process "fetched_track_data->sample" as desired
  ArTrackData_release(fetched_track_data);
}
ArTrackDataList_destroy(fetched_track_data_list);

आगे क्या होगा