Recording & Playback API ช่วยให้คุณบันทึกเซสชันและใช้แทนฟีดกล้องแบบเรียลไทม์ได้ อย่างไรก็ตาม ไฟล์บันทึกเหล่านี้จะมีเฉพาะข้อมูลวิดีโอและเซ็นเซอร์เท่านั้น นอกจากนี้ คุณยังเพิ่มข้อมูลที่กำหนดเองลงในไฟล์บันทึกเซสชันและรับข้อมูลดังกล่าวระหว่างการเล่นได้ ราวกับว่าข้อมูลเป็นส่วนหนึ่งของรูปภาพจากกล้อง
ARCore จะไม่รวมข้อมูลที่กำหนดเองไว้ในไฟล์บันทึกโดยอัตโนมัติ แต่ช่วยให้คุณเพิ่มข้อมูลที่กำหนดเองลงในเฟรม ARCore ขณะบันทึก และดึงข้อมูลเดียวกันนั้นจากเฟรมระหว่างการเล่นได้ คุณจะต้องเขียนโปรแกรมแอปในลักษณะที่ผู้ใช้จะได้รับข้อมูลที่คาดหวังเมื่อเล่นเซสชันซ้ำ
Use Case สําหรับข้อมูลที่กําหนดเอง
การเพิ่มข้อมูลที่กำหนดเองลงในไฟล์บันทึกเสียงจะช่วยขยายความเป็นไปได้สำหรับแอป AR ต่อไปนี้คือกรณีการใช้งานที่เฉพาะเจาะจงบางกรณี
ใช้ AR ได้ทุกที่ทุกเวลา
ก่อนหน้านี้ ผู้ใช้เข้าถึงประสบการณ์ AR ได้ก็ต่อเมื่ออยู่ในสถานที่และเวลาที่เหมาะสมเท่านั้น หากต้องการวางโคมไฟ AR ในห้องนั่งเล่น ผู้ใช้ต้องยืนอยู่ที่ตำแหน่งนั้นเพื่อดูว่าโคมไฟจะมีลักษณะอย่างไร เมื่อใช้แทร็กที่กำหนดเอง ผู้ใช้จะบันทึกห้องนั่งเล่นเพียงครั้งเดียวและเพิ่มเฟอร์นิเจอร์เสมือนจริงลงในฉากได้ทุกเมื่อที่ต้องการ
สร้างประสบการณ์ AR ร่วมกัน
การที่ไม่ต้องมีเซสชันการถ่ายทอดสดช่วยให้ผู้ใช้มีตัวเลือกในการแก้ไข AR มากขึ้น ซึ่งทำให้ผู้ใช้สามารถสร้างและเข้าถึงเนื้อหา AR ที่ไม่ซ้ำกันได้ทุกที่ทุกเวลา เช่น บันทึกสภาพแวดล้อมหนึ่งๆ เพิ่มเอฟเฟกต์ความจริงเสริม แล้วแชร์กับเพื่อนๆ
ข้อกำหนดเบื้องต้น
โปรดทำความเข้าใจแนวคิดพื้นฐานเกี่ยวกับ AR และวิธีกำหนดค่าเซสชัน ARCore ก่อนดำเนินการต่อ
เริ่มต้นการบันทึกด้วยข้อมูลที่กำหนดเอง
ทําตามขั้นตอนต่อไปนี้เพื่อเริ่มต้นการบันทึกด้วยข้อมูลที่กําหนดเอง หากต้องการเริ่ม หยุด และตรวจสอบเซสชันการบันทึก โปรดดูหัวข้อบันทึกและเล่นเซสชัน AR ซ้ำ
- รับ
ARCoreRecordingConfig
- สร้าง
Track
ใหม่ที่มี UUID ที่กําหนดเอง ระบบจะบันทึกข้อมูลที่กำหนดเองทั้งหมดไว้ที่นี่ - เพิ่ม
Track
ลงในARCoreRecordingConfig
ที่คุณสร้างระหว่างการกำหนดค่าเซสชัน
// 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.
var track = new Track {
Id = Guid.Parse("de5ec7a4-09ec-4c48-b2c3-a98b66e71893") // from UUID generator
};
// Add the Track to the recordingConfig.
// recordingConfig must already be configured.
List<Track> tracks = new List<Track>();
tracks.Add(track);
recordingConfig.Tracks = tracks;
ระบบจะถือว่าแทร็กใหม่ทั้งหมดเป็นการบันทึกแยกต่างหาก โดยแต่ละแทร็กที่บันทึกจะมี UUID ของตนเอง
กำหนดค่าแทร็กด้วยข้อมูลเพิ่มเติม
กําหนดค่าแทร็กด้วยข้อมูลเพิ่มเติมที่อธิบายการบันทึกเซสชัน เช่น คุณสามารถ "ติดแท็ก" แทร็กได้โดยเพิ่มโน้ตที่อธิบายสถานที่และเวลาที่บันทึกเซสชัน เช่น "บันทึกเซสชันนี้ที่ห้างสรรพสินค้าในช่วงบ่าย"
// Set additional data on this track.
// For example, describe where you recorded the session.
byte[] metadata = ...
track.Metadata = metadata;
กำหนดค่าแทร็กด้วยประเภท MIME
กำหนดค่าแทร็กด้วยประเภท MIME ที่อธิบายประเภทข้อมูลที่บันทึกไว้ในแทร็กเพื่อให้เข้ากันได้กับเครื่องมือภายนอก
หากคุณไม่ได้ระบุประเภท ระบบจะจัดหมวดหมู่ข้อมูลเป็น application/text
ARCore จะไม่สนใจประเภท MIME เมื่ออ่านข้อมูล
// Set a MIME type for compatibility with external tools.
track.MimeType = "text/csv";
บันทึกแทร็กข้อมูลที่กำหนดเอง
ระบบจะบันทึกข้อมูลแทร็กที่กำหนดเองทั้งหมดลงในเฟรม เวลาที่คุณบันทึกข้อมูลลงในเฟรมคือเวลาที่ระบบจะแสดงข้อมูลระหว่างการเล่น ตัวอย่างเช่น หากคุณเรียกใช้ RecordTrackData()
ที่มีค่า "A" ที่ 00:07:02
คุณจะได้รับ "A" กลับมาที่เครื่องหมาย 00:07:02
เมื่อเล่นแทร็ก
หากต้องการบันทึกแทร็กข้อมูลที่กำหนดเอง ให้กด RecordTrackData()
// Place an AR lamp in a room.
if (placeLampButtonWasPressed) {
// Convert the lamp data into a byte array.
var lampData = new byte[] { (byte) Lamp.FLOOR }; // a floor lamp
recordingManager.RecordTrackData(trackGuid, lampData);
}
เล่นแทร็กข้อมูลที่กำหนดเอง
ดึงข้อมูลที่กำหนดเองจากการบันทึกเซสชันระหว่างการเล่น
เริ่มต้นการเล่น
การเปิดใช้งานการเล่นด้วยข้อมูลที่กําหนดเองเหมือนกับการเปิดใช้งานการเล่นไฟล์บันทึกเซสชันปกติ
แสดงข้อมูลที่กำหนดเอง
เรียกใช้ GetUpdatedTrackData()
เพื่อเรียกข้อมูลที่กำหนดเองซึ่งบันทึกไว้ในเฟรม คุณดึงข้อมูลแทร็กหลายรายการจากเฟรมเดียวกันได้ ตัวอย่างเช่น หากคุณเรียกใช้ RecordTrackData()
2 ครั้งในเฟรมเดียวกันระหว่างการบันทึก คุณจะได้รับ TrackData
2 รายการระหว่างการเล่น
// Fetch the data recorded on a select frame and place it in a
// container object.
var trackDataList = recordingManager.GetUpdatedTrackData(trackGuid);
เมื่อ TrackData
อยู่ในออบเจ็กต์คอนเทนเนอร์ ให้ดึงข้อมูลไบต์ที่กำหนดเอง
// Extract the bytes of custom data from the list of track data.
foreach (TrackData trackData in trackDataList) {
var data = trackData.Data;
Lamp lamp = Lamp.fromByte(data[0]); // This is the lamp!
}
สิ่งที่จะเกิดขึ้นหลังจากนี้
- ดูวิธีสร้างแอปของคุณเองด้วยฟีเจอร์การบันทึกและการเล่นโดยไปที่ Codelab การบันทึกและการเล่น