การบันทึกและ Play API ให้คุณบันทึกวิดีโอและข้อมูล AR ครั้งเดียวภายในสภาพแวดล้อมที่กำหนด และใช้เนื้อหาดังกล่าวแทนที่เซสชันกล้องแบบสด
ข้อกำหนดเบื้องต้น
ตรวจสอบว่าคุณเข้าใจแนวคิด AR พื้นฐาน และวิธีกําหนดค่าเซสชัน ARCore ก่อนดำเนินการต่อ
ความเข้ากันได้กับ ARCore API อื่นๆ
เนื่องด้วยวิธีการประมวลผลข้อมูลเซสชัน ARCore API อาจให้ผลลัพธ์ที่แตกต่างกันระหว่างการเล่นเมื่อเทียบกับที่สังเกตขณะบันทึก นอกจากนี้ยังอาจทำให้เกิดผลลัพธ์ที่แตกต่างกันในระหว่างเซสชันการเล่นครั้งต่อๆ ไป ตัวอย่างเช่น จำนวนรายการที่ติดตามได้ที่ตรวจพบ เวลาที่แม่นยำของการตรวจจับ และท่าทางของคอมโพเนนต์ในช่วงเวลาต่างๆ ระหว่างการเล่นอาจแตกต่างออกไป
ความเข้ากันได้กับ Cloud Anchor
คุณโฮสต์และแก้ปัญหา Cloud Anchor ขณะบันทึกหรือเล่นเซสชันได้
กำลังบันทึก
เริ่ม หยุด และตรวจสอบสถานะของการบันทึกเซสชัน ARCore
บันทึกเซสชัน ARCore
หากต้องการบันทึกเซสชัน ARCore ให้กำหนดค่าเซสชันและระบุ URI ของ MP4 สำหรับการบันทึก โปรดติดต่อ ArSession_startRecording()
ก่อนโทรหา ArSession_resume()
เป็นครั้งแรก การบันทึกจะเริ่มต้นโดยอัตโนมัติเมื่อเซสชันกลับมาทำงานอีกครั้ง หากต้องการหยุดบันทึกโดยอัตโนมัติเมื่อเซสชันหยุดชั่วคราว ให้โทรหา ArRecordingConfig_setAutoStopOnPause()
หากต้องการบันทึกเซสชันบางส่วน ให้โทรหา ArSession_startRecording()
ขณะที่เซสชันดำเนินอยู่
ArRecordingConfig* recording_config = nullptr; ArRecordingConfig_create(ar_session, &recording_config); ArRecordingConfig_setMp4DatasetUri(ar_session, recording_config, mp4_dataset_uri); ArRecordingConfig_setAutoStopOnPause(ar_session, recording_config, true); CHECK(ArSession_startRecording(ar_session, recording_config)); // … // Resume ARCore session to start recording. CHECK(ArSession_resume(ar_session)); // … // Recording ends. CHECK(ArSession_pause(ar_session));
หยุดบันทึก
หากต้องการหยุดบันทึกโดยไม่หยุดเซสชัน AR ที่ใช้งานอยู่ชั่วคราว ให้โทร
ArSession_stopRecording()
และ ArRecordingConfig_destroy()
ArStatus status = ArSession_stopRecording(ar_session); ArRecordingConfig_destroy(recording_config);
ตรวจสอบสถานะการบันทึก
ArSession_getRecordingStatus()
สามารถใช้เพื่อกำหนด ArRecordingStatus
ปัจจุบันได้ทุกเมื่อ
ArRecordingStatus recording_status; // Can be called at any time. ArSession_getRecordingStatus(ar_session, &recording_status); if (recording_status == AR_RECORDING_NONE) { // The dataset recorder is not recording. } else if (recording_status == AR_RECORDING_OK) { // The dataset recorder is recording normally. } else if (recording_status == AR_RECORDING_IO_ERROR) { // The dataset recorder encountered an error while recording. }
การเล่น
เล่นเซสชัน AR ที่บันทึกไว้ก่อนหน้านี้ เซสชันจะเล่นแบบเรียลไทม์ และไม่สามารถปรับการเล่นหรือความเร็วเซสชันได้
เล่นเซสชันที่บันทึกไว้ก่อนหน้านี้
หากต้องการเล่นเซสชันที่บันทึกไว้ก่อนหน้า ให้โทร
ArSession_setPlaybackDatasetUri()
ก่อนการโทรครั้งแรกถึง
ArSession_resume()
เมื่อเริ่มเล่นเนื่องจากมีการเรียกใช้ ArSession_resume()
เป็นครั้งแรก การหยุดเซสชันชั่วคราวด้วยการเรียกใช้ ArSession_pause()
จะระงับการประมวลผลเฟรมรูปภาพของกล้องทั้งหมดและข้อมูลเซ็นเซอร์อื่นๆ ที่บันทึกไว้ในชุดข้อมูล เฟรมรูปภาพของกล้องและข้อมูลเฟรมเซ็นเซอร์ที่ถูกทิ้งด้วยวิธีนี้จะไม่ถูกประมวลผลใหม่เมื่อเซสชันกลับมาทำงานอีกครั้งโดยการเรียกใช้ ArSession_resume()
การติดตาม AR สำหรับเซสชันมักจะมีปัญหาเนื่องจากมีช่องว่างในข้อมูลที่ประมวลผลแล้ว
// Specify previously recorded MP4 file. CHECK(ArSession_setPlaybackDatasetUri(ar_session, mp4_dataset_uri)); // … // Playback starts from the beginning of the dataset. CHECK(ArSession_resume(ar_session)); // … // Pause AR session, but allow playback to silently continue. CHECK(ArSession_pause(ar_session)); // … // Resume AR session. Playback continues with gap to paused session. CHECK(ArSession_resume(ar_session));
เริ่มเล่นใหม่ตั้งแต่ต้น
หากต้องการรีสตาร์ทการเล่นจากจุดเริ่มต้นของชุดข้อมูล ให้หยุดเซสชันชั่วคราวและ
โทร
ArSession_setPlaybackDatasetUri()
ระบุการบันทึก MP4 เดียวกันก่อนที่จะดำเนินเซสชันต่อ
CHECK(ArSession_pause(ar_session)); // Pause and specify the *same* dataset: CHECK(ArSession_setPlaybackDatasetUri(ar_session, mp4_dataset_uri)); // Playback starts from the *beginning* of the dataset. CHECK(ArSession_resume(ar_session));
เล่นเซสชันอื่น
หากต้องการเล่นชุดข้อมูลอื่น ให้หยุดเซสชันชั่วคราวและระบุชุดข้อมูลใหม่ ก่อนที่จะกลับมาเล่นเซสชันต่อ
CHECK(ArSession_pause(ar_session)); // Pause and specify a *different* dataset: CHECK(ArSession_setPlaybackDatasetUri(ar_session, other_mp4_dataset_uri)); // Playback starts from the *beginning* of the new dataset. CHECK(ArSession_resume(ar_session));
ตรวจสอบสถานะการเล่น
ใช้
ArSession_getPlaybackStatus()
ได้ทุกเมื่อเพื่อกำหนดช่วงวันที่
ArPlaybackStatus
ArPlaybackStatus playback_status; // Can be called at any time. ArSession_getPlaybackStatus(ar_session, &playback_status); if (playback_status == AR_PLAYBACK_NONE) { // The session is not playing back an MP4 dataset file. } else if (playback_status == AR_PLAYBACK_OK) { // Playback is in process without issues. } else if (playback_status == AR_PLAYBACK_IO_ERROR) { // Playback has stopped due to an error. } else if (playback_status == AR_PLAYBACK_FINISHED) { // Playback has finished successfully. }
สิ่งที่จะเกิดขึ้นหลังจากนี้
- ดูวิธีเพิ่มข้อมูลที่กำหนดเองลงในเซสชันที่บันทึกไว้