การบันทึกและ play API ช่วยให้คุณบันทึกเซสชันและใช้แทนฟีดกล้องแบบเรียลไทม์ได้ แต่ไฟล์บันทึกเหล่านี้จะมีเฉพาะข้อมูลวิดีโอและเซ็นเซอร์เท่านั้น คุณสามารถเพิ่มข้อมูลที่กำหนดเองลงในการบันทึกเซสชันและส่งข้อมูลกลับไปให้คุณระหว่างการเล่นได้ เสมือนว่าข้อมูลนั้นเป็นส่วนหนึ่งของรูปภาพจากกล้อง
ARCore จะไม่รวมข้อมูลที่กำหนดเองไว้ในไฟล์บันทึกโดยอัตโนมัติ แต่จะช่วยให้คุณสามารถเพิ่มข้อมูลที่กำหนดเองลงในเฟรม ARCore ระหว่างการบันทึก และเรียกข้อมูลเดียวกันนั้นจากเฟรมขณะเล่นได้ การกำหนดแอปให้อยู่ในรูปแบบที่ผู้ใช้จะได้รับข้อมูลที่คาดหวังเมื่อเล่นเซสชันอีกครั้งนั้นขึ้นอยู่กับคุณ
กรณีการใช้งานสำหรับข้อมูลที่กำหนดเอง
การเพิ่มข้อมูลที่กำหนดเองลงในการบันทึกจะเพิ่มโอกาสให้แอป AR ของคุณ ต่อไปนี้เป็นกรณีการใช้งานที่เฉพาะเจาะจง
ใช้ AR ได้ทุกที่ทุกเวลา
ก่อนหน้านี้ผู้ใช้จะเข้าถึงประสบการณ์ AR ได้เฉพาะในสถานที่และเวลาที่เหมาะสมเท่านั้น หากต้องการวางโคมไฟ AR ในห้องนั่งเล่น นักเรียนจะต้องยืนอยู่ที่ตำแหน่งนั้นเพื่อดูว่าโคมไฟจะมีหน้าตาเป็นอย่างไร เมื่อมีแทร็กที่กำหนดเอง พวกเขาจะบันทึกภาพในห้องนั่งเล่นของตนเพียงครั้งเดียว แล้วเพิ่มเฟอร์นิเจอร์เสมือนจริงลงในฉากได้ทุกเมื่อที่ต้องการ
สร้างประสบการณ์ AR ร่วมกัน
เมื่อไม่มีข้อกำหนดเซสชันสด ผู้ใช้มีตัวเลือกมากขึ้นสำหรับการแก้ไข AR ซึ่งช่วยให้สร้างและเข้าถึงเนื้อหา AR ที่ไม่เหมือนใครได้ทุกที่ทุกเวลา เช่น สามารถบันทึกสภาพแวดล้อม ใส่เอฟเฟกต์ Augmented Reality และแชร์กับเพื่อนๆ ได้
ข้อกำหนดเบื้องต้น
โปรดทำความเข้าใจแนวคิดพื้นฐานของ AR และวิธีกำหนดค่าเซสชัน ARCore ก่อนดำเนินการต่อ
บันทึกด้วยข้อมูลที่กำหนดเอง
สร้างการบันทึกเซสชันด้วยข้อมูลที่กำหนดเอง
เริ่มต้นการบันทึกด้วยข้อมูลที่กำหนดเอง
ทำตามขั้นตอนต่อไปนี้เพื่อเริ่มต้นการบันทึกด้วยข้อมูลที่กำหนดเอง หากต้องการเริ่ม หยุด และตรวจสอบเซสชันการบันทึก โปรดดูหัวข้อบันทึกและเล่นเซสชัน AR ซ้ำ
- รับ
RecordingConfig
- สร้าง
Track
ใหม่ที่มี UUID ที่กําหนดเอง ข้อมูลที่กำหนดเองทั้งหมดจะบันทึกไว้ที่นี่ - เพิ่ม
Track
ไปยังRecordingConfig
ที่คุณสร้างขึ้นระหว่างการกำหนดค่าเซสชัน
// 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.
UUID trackUUID = UUID.fromString("de5ec7a4-09ec-4c48-b2c3-a98b66e71893"); // from UUID generator
Track track = new Track(session).setId(trackUUID);
// Add the Track to the recordingConfig.
// recordingConfig must already be configured.
recordingConfig.addTrack(track);
// 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.
val trackUUID = UUID.fromString("de5ec7a4-09ec-4c48-b2c3-a98b66e71893") // from UUID generator
val track = Track(session).setId(trackUUID)
// Add the Track to the recordingConfig.
// recordingConfig must already be configured.
recordingConfig.addTrack(track)
แทร็กใหม่ทั้งหมดจะถือว่าเป็นการบันทึกแยกกัน โดยแทร็กที่บันทึกไว้แต่ละแทร็กจะมี UUID ของตัวเอง
ไม่บังคับ: กำหนดค่าแทร็กด้วยข้อมูลเพิ่มเติม
ในกรณีที่ต้องการระบุบันทึกนี้ในภายหลัง คุณสามารถกำหนดค่าแทร็กด้วยข้อมูลเพิ่มเติมที่อธิบายการบันทึกเซสชัน ตัวอย่างเช่น คุณสามารถ "ติดแท็ก" แทร็กได้โดยการเพิ่มโน้ตที่อธิบายสถานที่และเวลาที่คุณบันทึกเซสชันว่า "เซสชันนี้บันทึกอยู่ที่ห้างสรรพสินค้าตอนบ่าย"
// Set additional data on this track.
// For example, describe where you recorded the session.
byte[] customTrackData = "airport".getBytes(StandardCharsets.UTF_8);
track.setMetadata(ByteBuffer.wrap(customTrackData));
// Set additional data on this track.
// For example, describe where you recorded the session.
val customTrackData: ByteArray = "airport".toByteArray()
track.setMetadata(ByteBuffer.wrap(customTrackData))
ไม่บังคับ: กำหนดค่าแทร็กด้วยประเภท MIME
หากแอปของคุณต้องเข้ากันได้กับเครื่องมือภายนอก คุณสามารถกำหนดค่าแทร็กด้วยประเภท MIME ที่อธิบายประเภทข้อมูลที่บันทึกไว้ในแทร็ก หากคุณไม่ระบุประเภท ข้อมูลจะถูกจัดอยู่ในหมวดหมู่ application/text
ARCore จะไม่สนใจประเภท MIME เมื่ออ่านข้อมูล
// Set a MIME type for compatibility with external tools.
track.setMimeType("text/csv");
// Set a MIME type for compatibility with external tools.
track.setMimeType("text/csv")
บันทึกแทร็กข้อมูลที่กำหนดเอง
ข้อมูลแทร็กที่กำหนดเองทั้งหมดจะได้รับการบันทึกลงใน Frame
เซสชัน AR ใช้ session.update()
เพื่อจัดเฟรม ช่วงเวลาที่คุณบันทึกข้อมูลลงในเฟรมเป็นเวลาเดียวกับระบบจะส่งคืนข้อมูลระหว่างการเล่น ตัวอย่างเช่น หากเรียกใช้ recordTrackData()
โดยมีค่า "A" ที่ 00:07:02
คุณจะได้รับเงินคืนที่เครื่องหมาย 00:07:02
เมื่อมีการเล่นแทร็กดังกล่าว
หากต้องการบันทึกการติดตามข้อมูลที่กำหนดเอง ให้แปลงข้อมูลเป็น ByteBuffer
แล้วเรียกใช้ recordTrackData()
// Place an AR lamp in a room.
if (placeLampButtonWasPressed) {
Lamp lampProduct = Lamp.FLOOR; // a floor lamp
// Convert the lamp data into a byte array.
ByteBuffer lampData = ByteBuffer.wrap(new byte[] {(byte) lampProduct.ordinal()});
frame.recordTrackData(trackUUID, lampData);
}
// Place an AR lamp in a room.
if (placeLampButtonWasPressed) {
val lampProduct = Lamp.FLOOR // a floor lamp
// Convert the lamp data into a byte array.
val lampData = ByteBuffer.wrap(byteArrayOf(lampProduct.ordinal.toByte()))
frame.recordTrackData(trackUUID, lampData)
}
เล่นแทร็กข้อมูลที่กำหนดเอง
ดึงข้อมูลที่กำหนดเองจากการบันทึกเซสชันระหว่างการเล่น
เริ่มต้นการเล่น
การเปิดใช้งานการเล่นด้วยข้อมูลที่กําหนดเองเหมือนกับการเปิดใช้งานการเล่นไฟล์บันทึกเซสชันปกติ
แสดงข้อมูลที่กำหนดเอง
เรียกใช้ getUpdatedTrackData()
เพื่อเรียกข้อมูลที่กำหนดเองซึ่งบันทึกไว้ในเฟรม การเรียกข้อมูลแทร็กหลายรายการจากเฟรมเดียวกันสามารถทำได้ ตัวอย่างเช่น หากเรียกใช้ recordTrackData()
2 ครั้งบนเฟรมเดียวกันระหว่างการบันทึก คุณจะได้รับ TrackData
2 ครั้งระหว่างการเล่น
// Fetch the data recorded on a select frame and place it in a container object.
Collection<TrackData> trackDataList = frame.getUpdatedTrackData(trackUUID);
// Fetch the data recorded on a select frame and place it in a container object.
val trackDataList: Collection<TrackData> = frame.getUpdatedTrackData(trackUUID)
เมื่อ TrackData
อยู่ในออบเจ็กต์คอนเทนเนอร์ ให้แยกไบต์ของข้อมูลที่กำหนดเองแล้ว
// Extract the bytes of custom data from the list of track data.
for (TrackData trackData : trackDataList) {
ByteBuffer bytes = trackData.getData();
Lamp lamp = Lamp.values()[bytes.get()]; // this is the lamp!
}
// Extract the bytes of custom data from the list of track data.
for (trackData in trackDataList) {
val bytes = trackData.data
val lamp = Lamp.values()[bytes.get().toInt()] // this is the lamp!
}
สิ่งที่จะเกิดขึ้นหลังจากนี้
- ดูวิธีสร้างแอปของคุณเองด้วยฟีเจอร์การบันทึกและ เล่นโดยทำตามขั้นตอนการบันทึกและ Codelab การเล่น