Perekaman & Playback API memungkinkan Anda merekam video dan data AR sekali dalam lingkungan tertentu dan menggunakan konten tersebut untuk menggantikan sesi kamera live.
Prasyarat
Pastikan Anda memahami konsep dasar AR dan cara mengonfigurasi sesi ARCore sebelum melanjutkan.
Kompatibilitas dengan ARCore API lainnya
Karena cara pemrosesan data sesi, ARCore API mungkin memberikan hasil yang berbeda selama pemutaran dibandingkan dengan yang diamati selama perekaman. Iklan ini juga dapat memberikan hasil yang berbeda pada sesi pemutaran berikutnya. Misalnya, jumlah item yang dapat dilacak terdeteksi, waktu deteksi yang tepat, dan posenya seiring waktu mungkin berbeda selama pemutaran.
Kompatibilitas dengan Cloud Anchor
Anda dapat menghosting dan me-resolve Cloud Anchor saat merekam atau memutar sesi.
Merekam
Memulai, menghentikan, dan memeriksa status rekaman sesi ARCore.
Merekam sesi ARCore
Untuk merekam sesi ARCore, konfigurasikan sesi dan berikan URI MP4 untuk rekaman. Panggil ArSession_startRecording()
sebelum panggilan pertama ke ArSession_resume()
. Perekaman dimulai secara otomatis saat sesi dilanjutkan. Untuk otomatis berhenti merekam saat sesi dijeda, panggil ArRecordingConfig_setAutoStopOnPause()
. Untuk merekam sesi parsial, panggil ArSession_startRecording()
saat sesi sedang berjalan.
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));
Menghentikan perekaman
Untuk berhenti merekam tanpa menjeda sesi AR yang sedang berjalan, panggil
ArSession_stopRecording()
dan ArRecordingConfig_destroy()
.
ArStatus status = ArSession_stopRecording(ar_session); ArRecordingConfig_destroy(recording_config);
Memeriksa status perekaman
ArSession_getRecordingStatus()
dapat digunakan kapan saja untuk menentukan ArRecordingStatus
saat ini.
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. }
Pemutaran
Memutar sesi AR yang direkam sebelumnya. Sesi diputar kembali secara real time, dan pemutaran atau kecepatan sesi tidak dapat disesuaikan.
Memutar sesi yang direkam sebelumnya
Untuk memutar sesi yang direkam sebelumnya, panggil
ArSession_setPlaybackDatasetUri()
sebelum panggilan
pertama ke
ArSession_resume()
.
Setelah pemutaran dimulai karena panggilan pertama ke ArSession_resume()
, menjeda sesi dengan memanggil ArSession_pause()
akan menangguhkan pemrosesan semua frame gambar kamera dan data sensor lainnya yang direkam dalam set data. Bingkai gambar kamera dan data frame sensor yang dihapus dengan cara ini tidak akan diproses ulang saat sesi dilanjutkan kembali dengan memanggil ArSession_resume()
. Pelacakan AR untuk sesi umumnya akan terpengaruh karena kesenjangan dalam data yang diproses.
// 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));
Mulai ulang pemutaran dari awal
Untuk memulai ulang pemutaran dari awal {i>dataset<i}, jeda sesi dan
panggilan telepon
ArSession_setPlaybackDatasetUri()
,
menentukan perekaman MP4 yang sama, sebelum melanjutkan sesi.
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));
Putar sesi lain
Untuk memutar {i>dataset<i} yang berbeda, jeda sesi dan tentukan {i>dataset<i} baru sebelum melanjutkan sesi.
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));
Memeriksa status pemutaran
Gunakan
ArSession_getPlaybackStatus()
kapan saja untuk menentukan
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. }
Langkah selanjutnya
- Pelajari cara menambahkan data kustom ke sesi yang direkam.