เพิ่มข้อมูลที่กำหนดเองขณะบันทึกใน Android NDK

การบันทึกและ Play API ให้คุณบันทึกเซสชันและนำไปใช้แทนฟีดกล้องแบบเรียลไทม์ได้ แต่ไฟล์บันทึกเหล่านี้จะมีเฉพาะข้อมูลวิดีโอและเซ็นเซอร์เท่านั้น นอกจากนี้คุณยังเพิ่มข้อมูลที่กำหนดเองลงในการบันทึกเซสชันและส่งข้อมูลกลับไปให้คุณระหว่างการเล่นได้เสมือนว่าข้อมูลนั้นเป็นส่วนหนึ่งของรูปภาพจากกล้อง

ARCore จะไม่รวมข้อมูลที่กำหนดเองในการบันทึกโดยอัตโนมัติ แต่จะช่วยให้คุณสามารถเพิ่มข้อมูลที่กำหนดเองลงในเฟรม ARCore ระหว่างการบันทึก และเรียกข้อมูลเดียวกันนั้นจากเฟรมขณะเล่นได้ การกำหนดแอปให้อยู่ในรูปแบบที่ผู้ใช้จะได้รับข้อมูลที่คาดหวังเมื่อเล่นเซสชันอีกครั้งนั้นขึ้นอยู่กับคุณ

กรณีการใช้งานสำหรับข้อมูลที่กำหนดเอง

การเพิ่มข้อมูลที่กำหนดเองลงในการบันทึกจะเพิ่มโอกาสให้แอป AR ของคุณ ต่อไปนี้เป็นกรณีการใช้งานที่เฉพาะเจาะจง

ใช้ AR ได้ทุกที่ทุกเวลา

ก่อนหน้านี้ผู้ใช้จะเข้าถึงประสบการณ์ AR ได้เฉพาะในสถานที่และเวลาที่เหมาะสมเท่านั้น หากต้องการวางโคมไฟ AR ในห้องนั่งเล่น นักเรียนจะต้องยืนอยู่ที่ตำแหน่งนั้นเพื่อดูว่าโคมไฟจะมีหน้าตาเป็นอย่างไร เมื่อมีแทร็กที่กำหนดเอง พวกเขาจะบันทึกภาพในห้องนั่งเล่นของตนเพียงครั้งเดียว แล้วเพิ่มเฟอร์นิเจอร์เสมือนจริงลงในฉากได้ทุกเมื่อที่ต้องการ

สร้างประสบการณ์ AR ร่วมกัน

เมื่อไม่มีข้อกำหนดเซสชันสด ผู้ใช้มีตัวเลือกมากขึ้นสำหรับการแก้ไข AR ซึ่งช่วยให้สร้างและเข้าถึงเนื้อหา AR ที่ไม่เหมือนใครได้ทุกที่ทุกเวลา เช่น สามารถบันทึกสภาพแวดล้อม ใส่เอฟเฟกต์ Augmented Reality และแชร์กับเพื่อนๆ ได้

ข้อกำหนดเบื้องต้น

ตรวจสอบว่าคุณเข้าใจแนวคิด AR พื้นฐาน และวิธีกําหนดค่าเซสชัน ARCore ก่อนดำเนินการต่อ

บันทึกด้วยข้อมูลที่กำหนดเอง

สร้างการบันทึกเซสชันด้วยข้อมูลที่กำหนดเอง

เริ่มต้นการบันทึกด้วยข้อมูลที่กำหนดเอง

ทำตามขั้นตอนต่อไปนี้เพื่อเริ่มต้นการบันทึกด้วยข้อมูลที่กำหนดเอง หากต้องการเริ่ม หยุด และตรวจสอบเซสชันการบันทึก โปรดดูที่บันทึกและเล่นเซสชัน AR

  1. รับ ArRecordingConfig
  2. สร้าง ArTrack ใหม่ด้วย UUID ที่กำหนดเอง ข้อมูลที่กำหนดเองทั้งหมดจะบันทึกไว้ที่นี่
  3. เพิ่ม ArTrack ไปยัง ArRecordingConfig ที่คุณสร้างขึ้นระหว่างการกำหนดค่าเซสชัน
// 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);

แทร็กใหม่ทั้งหมดจะถือว่าเป็นการบันทึกแยกกัน โดยแทร็กที่บันทึกไว้แต่ละแทร็กจะมี UUID ของตัวเอง

ไม่บังคับ: กำหนดค่าแทร็กด้วยข้อมูลเพิ่มเติม

ในกรณีที่ต้องการระบุบันทึกนี้ในภายหลัง คุณสามารถกำหนดค่าแทร็กด้วยข้อมูลเพิ่มเติมที่อธิบายการบันทึกเซสชัน ตัวอย่างเช่น คุณสามารถ "ติดแท็ก" แทร็กได้โดยการเพิ่มโน้ตที่อธิบายสถานที่และเวลาที่คุณบันทึกเซสชันว่า "เซสชันนี้บันทึกอยู่ที่ห้างสรรพสินค้าตอนบ่าย"

// 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 เซสชัน AR ใช้ ArSession_update() เพื่อจัดเฟรม ช่วงเวลาที่คุณบันทึกข้อมูลลงในเฟรมเป็นเวลาเดียวกับระบบจะส่งคืนข้อมูลระหว่างการเล่น ตัวอย่างเช่น หากเรียกใช้ ArFrame_recordTrackData() ด้วยค่า "A" ที่ 00:07:02 คุณจะได้รับเงินคืนที่เครื่องหมาย 00:07:02 เมื่อมีการเล่นแทร็กดังกล่าว

หากต้องการบันทึกการติดตามข้อมูลที่กำหนดเอง โปรดโทรไปที่ 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_getUpdatedTrackData() เพื่อเรียกข้อมูลที่กำหนดเองซึ่งบันทึกไว้ใน ArFrame การเรียกข้อมูลแทร็กหลายรายการจากเฟรมเดียวกันสามารถทำได้ ตัวอย่างเช่น หากเรียกใช้ ArFrame_recordTrackData() 2 ครั้งบนเฟรมเดียวกันระหว่างการบันทึก คุณจะได้รับ ArTrackData 2 ครั้งระหว่างการเล่น

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

สิ่งที่จะเกิดขึ้นหลังจากนี้