API การบันทึกและเล่นช่วยให้คุณบันทึกเซสชันและใช้แทนฟีดกล้องแบบเรียลไทม์ได้ อย่างไรก็ตาม การบันทึกเหล่านี้มีเฉพาะข้อมูลวิดีโอและเซ็นเซอร์เท่านั้น คุณยังสามารถเพิ่มข้อมูลที่กำหนดเองลงในการบันทึกเซสชันและส่งข้อมูลกลับมาในระหว่างการเล่นได้ เสมือนว่าข้อมูลนั้นเป็นส่วนหนึ่งของรูปภาพจากกล้อง
ARCore จะไม่รวมข้อมูลที่กำหนดเองไว้ในเสียงที่บันทึกไว้โดยอัตโนมัติ แต่ช่วยให้คุณสามารถเพิ่มข้อมูลที่กำหนดเองลงในเฟรม ARCore ขณะบันทึกและดึงข้อมูลเดียวกันจากเฟรมระหว่างการเล่นได้ คุณจะเลือกโปรแกรมแอปในลักษณะที่ผู้ใช้จะได้รับข้อมูลตามที่คาดไว้เมื่อเล่นเซสชันกลับคืนมาหรือไม่
Use Case สำหรับข้อมูลที่กำหนดเอง
การเพิ่มข้อมูลที่กำหนดเองลงในไฟล์บันทึกเสียงจะช่วยให้ผู้คนใช้แอป AR ได้หลากหลายมากขึ้น กรณีการใช้งานเฉพาะมีดังนี้
ใช้ AR ได้ทุกที่ทุกเวลา
ที่ผ่านมาผู้ใช้จะเข้าถึงประสบการณ์ AR ได้ในสถานที่และเวลาที่เหมาะสมเท่านั้น หากนักเรียนต้องการติดตั้งโคมไฟ AR ในห้องนั่งเล่น นักเรียนจะต้องยืนที่ตำแหน่งนั้นเพื่อดูว่าโคมไฟตรงนั้นเป็นอย่างไร แทร็กที่กำหนดเองช่วยให้ครีเอเตอร์บันทึกห้องนั่งเล่นของตัวเองเพียงครั้งเดียว และเพิ่มเฟอร์นิเจอร์เสมือนจริงลงในฉากได้ทุกเมื่อที่ต้องการ
สร้างประสบการณ์ AR ร่วมกัน
โดยผู้ใช้จะมีตัวเลือกเพิ่มเติมสำหรับการแก้ไข AR เพื่อสร้างและเข้าถึงเนื้อหา AR ที่ไม่ซ้ำกันได้ทุกที่ทุกเวลา โดยไม่ต้องมีข้อกำหนดของเซสชันสด เช่น ผู้เรียนจะบันทึกสภาพแวดล้อมที่กำหนด เพิ่มเอฟเฟกต์ Augmented Reality และแชร์กับเพื่อนๆ ได้
ข้อกำหนดเบื้องต้น
ตรวจสอบว่าคุณเข้าใจแนวคิด AR พื้นฐาน และวิธีกำหนดค่าเซสชัน ARCore ก่อนดำเนินการต่อ
บันทึกด้วยข้อมูลที่กำหนดเอง
สร้างการบันทึกเซสชันด้วยข้อมูลที่กำหนดเอง
เริ่มต้นการบันทึกด้วยข้อมูลที่กำหนดเอง
ทำตามขั้นตอนต่อไปนี้เพื่อเริ่มการบันทึกด้วยข้อมูลที่กำหนดเอง หากต้องการเริ่ม หยุด และตรวจสอบเซสชันการบันทึก โปรดดูหัวข้อบันทึกและเล่นเซสชัน AR
- รับ
RecordingConfig
- สร้าง
Track
ใหม่ด้วย UUID ที่กำหนดเอง ข้อมูลที่กำหนดเองทั้งหมดจะบันทึกไว้ที่นี่ - เพิ่ม
Track
ลงในRecordingConfig
ที่คุณสร้างระหว่างการกำหนดค่าเซสชัน
Java
// 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);
Kotlin
// 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 ของตัวเอง
ไม่บังคับ: กำหนดค่าแทร็กด้วยข้อมูลเพิ่มเติม
ในกรณีที่คุณต้องการค้นหาในภายหลัง คุณสามารถกำหนดค่าแทร็กด้วยข้อมูลเพิ่มเติมที่อธิบายการบันทึกเซสชัน ตัวอย่างเช่น คุณสามารถ "ติดแท็ก" แทร็กโดยเพิ่มโน้ตที่อธิบายสถานที่และเวลาที่คุณบันทึกเซสชัน เช่น "เซสชันนี้มีการบันทึกที่ห้างสรรพสินค้าในตอนบ่าย"
Java
// 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));
Kotlin
// 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 เมื่ออ่านข้อมูล
Java
// Set a MIME type for compatibility with external tools. track.setMimeType("text/csv");
Kotlin
// Set a MIME type for compatibility with external tools. track.setMimeType("text/csv")
บันทึกการติดตามข้อมูลที่กำหนดเอง
ข้อมูลแทร็กที่กำหนดเองทั้งหมดจะบันทึกไปยัง Frame
เซสชัน AR จะใช้ session.update()
เพื่อสร้างเฟรม เวลาที่คุณบันทึกข้อมูลลงในเฟรมคือเวลาเดียวกับที่ระบบจะส่งคืนข้อมูลระหว่างการเล่น เช่น หากเรียก recordTrackData()
ด้วยค่า "A" ที่ 00:07:02
คุณจะได้รับ "A" คืนที่เครื่องหมาย 00:07:02
เมื่อมีการเล่นแทร็ก
หากต้องการบันทึกการติดตามข้อมูลที่กําหนดเอง ให้แปลงข้อมูลเป็น ByteBuffer
แล้วเรียกใช้ recordTrackData()
Java
// 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); }
Kotlin
// 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 ครั้งระหว่างการเล่น
Java
// Fetch the data recorded on a select frame and place it in a container object. Collection<TrackData> trackDataList = frame.getUpdatedTrackData(trackUUID);
Kotlin
// Fetch the data recorded on a select frame and place it in a container object. val trackDataList: Collection<TrackData> = frame.getUpdatedTrackData(trackUUID)
เมื่อ TrackData
อยู่ใน Container Object แล้ว ให้แยกไบต์ของข้อมูลที่กำหนดเอง
Java
// 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! }
Kotlin
// 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! }
สิ่งที่จะเกิดขึ้นหลังจากนี้
- ดูวิธีสร้างแอปของคุณเองด้วยฟีเจอร์การบันทึกและการเล่นได้ที่ห้องทดลองการบันทึกและเล่น