Menambahkan data kustom saat merekam di Android NDK

Perekaman & Playback API memungkinkan Anda merekam sesi dan menggunakannya sebagai pengganti feed kamera real-time. Namun, rekaman ini hanya berisi data video dan sensor. Anda juga dapat menambahkan data kustom ke rekaman sesi dan menampilkan data tersebut selama pemutaran, seolah-olah data tersebut merupakan bagian dari gambar kamera.

ARCore tidak secara otomatis menyertakan data khusus apa pun dalam rekaman. Sebaliknya, Anda dapat menambahkan data kustom ke frame ARCore selama perekaman, dan mengambil data yang sama dari frame selama pemutaran. Anda dapat memprogram aplikasi sedemikian rupa sehingga pengguna akan mendapatkan kembali data yang diharapkan saat memutar sesi mereka kembali.

Kasus penggunaan untuk data kustom

Menambahkan data kustom ke rekaman akan memperluas kemungkinan untuk aplikasi AR Anda. Berikut ini beberapa kasus penggunaan spesifik.

Gunakan AR kapan saja di mana saja

Sebelumnya, pengguna hanya dapat mengakses pengalaman AR di tempat dan waktu yang tepat. Jika ingin memasang lampu AR di ruang tamu, mereka harus berdiri di lokasi secara fisik untuk melihat tampilan lampu di sana. Dengan trek kustom, mereka dapat merekam ruang tamu sekali dan menambahkan furnitur virtual ke adegan kapan pun mereka inginkan.

Menciptakan pengalaman AR bersama-sama

Tanpa persyaratan sesi live, pengguna memiliki lebih banyak opsi untuk pengeditan AR, sehingga mereka dapat membuat dan mengakses konten AR yang unik kapan saja dan di mana saja. Misalnya, mereka dapat merekam lingkungan tertentu, menambahkan efek augmented-reality, dan membagikannya kepada teman.

Prasyarat

Pastikan Anda memahami konsep dasar AR dan cara mengonfigurasi sesi ARCore sebelum melanjutkan.

Merekam dengan data kustom

Membuat rekaman sesi dengan data kustom.

Melakukan inisialisasi perekaman dengan data kustom

Ikuti langkah-langkah berikut untuk melakukan inisialisasi perekaman dengan data kustom. Untuk memulai, menghentikan, dan memeriksa sesi perekaman, lihat Merekam dan memutar sesi AR.

  1. Dapatkan ArRecordingConfig.
  2. Buat ArTrack baru dengan UUID kustom. Semua data kustom akan disimpan di sini.
  3. Tambahkan ArTrack ke ArRecordingConfig yang Anda buat selama konfigurasi sesi.
// 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.
ArTrack* track = NULL;
ArTrack_create(ar_session, &track);
// String from UUID generator: de5ec7a4-09ec-4c48-b2c3-a98b66e71893
uint8_t uuid_byte_array[16] = {0xde, 0x5e, 0xc7, 0xa4, 0x09, 0xec,
                               0x4c, 0x48, 0xb2, 0xc3, 0xa9, 0x8b,
                               0x66, 0xe7, 0x18, 0x93};
ArTrack_setId(ar_session, track, uuid_byte_array);

// Add the ArTrack to the recording_config.
// recording_config must already be configured.
ArRecordingConfig_addTrack(ar_session, recording_config, track);
ArTrack_destroy(track);

Semua lagu baru diperlakukan sebagai rekaman terpisah, dengan setiap lagu yang direkam menempati UUID-nya sendiri.

Opsional: Mengonfigurasi jalur dengan data tambahan

Jika ingin mengidentifikasinya nanti, Anda dapat mengonfigurasi jalur dengan data tambahan yang menjelaskan perekaman sesi. Misalnya, Anda dapat “memberi tag” pada trek dengan menambahkan catatan yang menjelaskan lokasi dan waktu di mana Anda merekam sesi: “Sesi ini direkam di mal pada sore hari”.

// Set additional data on this track.
// For example, describe where you recorded the session.
uint8_t metadata_size = 4;
uint8_t metadata[5] = "HOME";
ArTrack_setMetadata(ar_session, track, metadata, metadata_size);

Opsional: Mengonfigurasi jalur dengan jenis MIME

Jika aplikasi harus kompatibel dengan alat eksternal, Anda dapat mengonfigurasi jalur dengan jenis MIME yang mendeskripsikan jenis data yang dicatat dalam jalur. Jika Anda tidak menentukan jenis, data akan dikategorikan sebagai application/text. ARCore mengabaikan jenis MIME saat membaca data.

// Set a MIME type for compatibility with external tools.
ArTrack_setMimeType(ar_session, track, "text/csv");

Merekam jalur data kustom

Semua data trek kustom dicatat ke ArFrame. Sesi AR menggunakan ArSession_update() untuk mendapatkan frame. Waktu saat Anda merekam data ke dalam frame adalah waktu yang sama dengan saat data akan ditampilkan selama pemutaran. Misalnya, jika memanggil ArFrame_recordTrackData() dengan nilai “A” pada 00:07:02, Anda akan mendapatkan kembali “A” pada tanda 00:07:02 saat trek diputar.

Untuk merekam jalur data kustom, panggil ArFrame_recordTrackData().

// Place an AR lamp in a room.
if (place_lamp_button_was_pressed) {
  uint8_t lamp_data[1] = {lamp_id};
  ArFrame_recordTrackData(ar_session, frame, uuid_byte_array, lamp_data,
                          /*payload_size=*/1);
}

Memutar trek data kustom

Mengekstrak data kustom dari rekaman sesi selama pemutaran.

Melakukan inisialisasi pemutaran

Melakukan inisialisasi pemutaran dengan data kustom sama dengan menginisialisasi pemutaran rekaman sesi reguler.

Menampilkan data kustom

Panggil ArFrame_getUpdatedTrackData() untuk mengambil data kustom yang direkam di ArFrame. Anda dapat mengambil beberapa data trek dari frame yang sama. Misalnya, jika Anda memanggil ArFrame_recordTrackData() dua kali di frame yang sama selama perekaman, Anda akan mendapatkan kembali dua instance ArTrackData selama pemutaran.

// Create the container to hold the track data retrieved from the frame.
ArTrackDataList* fetched_track_data_list;
ArTrackDataList_create(ar_session, &fetched_track_data_list);

// Fetch the track data from the frame into the created container.
ArFrame_getUpdatedTrackData(ar_session, frame, uuid_byte_array,
                            fetched_track_data_list);

Setelah ArTrackData berada di objek container, ekstrak byte data kustom.

// Fetch the size of the track data list.
int32_t fetched_track_data_list_size;
ArTrackDataList_getSize(ar_session, fetched_track_data_list,
                        &fetched_track_data_list_size);

// Iterate through the list.
for (int i = 0; i < fetched_track_data_list_size; i++) {
  ArTrackData* fetched_track_data;
  ArTrackDataList_acquireItem(ar_session, fetched_track_data_list, i,
                              &fetched_track_data);
  // Process "fetched_track_data->sample" as desired
  ArTrackData_release(fetched_track_data);
}
ArTrackDataList_destroy(fetched_track_data_list);

Langkah selanjutnya