Menambahkan data kustom saat merekam di Android

Recording & 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 selama pemutaran, seolah-olah data tersebut merupakan bagian dari gambar kamera.

ARCore tidak otomatis menyertakan data kustom apa pun dalam rekaman. Sebaliknya, ini memungkinkan Anda 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 mereka harapkan saat memutar sesi mereka kembali.

Kasus penggunaan untuk data kustom

Menambahkan data kustom ke rekaman memperluas kemungkinan untuk aplikasi AR Anda. Berikut adalah 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 secara fisik di lokasi untuk melihat tampilan lampu di sana. Dengan trek kustom, mereka dapat sekali merekam ruang tamu dan menambahkan furnitur virtual ke adegan kapan pun mereka mau.

Membuat 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 AR dasar dan cara mengonfigurasi sesi ARCore sebelum melanjutkan.

Merekam dengan data kustom

Membuat rekaman sesi dengan data kustom.

Menginisialisasi perekaman dengan data kustom

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

  1. Dapatkan RecordingConfig.
  2. Buat Track baru dengan UUID kustom. Semua data kustom akan disimpan di sini.
  3. Tambahkan Track ke RecordingConfig yang Anda buat selama konfigurasi sesi.

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)

Semua trek baru diperlakukan sebagai rekaman terpisah, dan setiap trek 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 saat Anda merekam sesi: "Sesi ini direkam di mal pada sore hari".

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))

Opsional: Mengonfigurasi trek dengan jenis MIME

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

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")

Rekam jalur data kustom

Semua data jalur kustom dicatat ke Frame. Sesi AR menggunakan session.update() untuk mendapatkan frame. Waktu di mana Anda merekam data ke dalam {i>frame<i} adalah waktu yang sama di mana data akan dikembalikan selama pemutaran. Misalnya, jika Anda memanggil recordTrackData() dengan nilai “A” pada 00:07:02, Anda akan mendapatkan “A” kembali pada tanda 00:07:02 saat trek diputar.

Untuk merekam jalur data kustom, konversikan data menjadi ByteBuffer dan panggil 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)
}

Memutar jalur data kustom

Mengekstrak data kustom dari rekaman sesi selama pemutaran.

Menginisialisasi pemutaran

Memulai pemutaran dengan data kustom sama dengan memulai pemutaran rekaman sesi reguler.

Mengembalikan data khusus

Panggil getUpdatedTrackData() untuk mengambil data kustom yang dicatat pada frame. Hal ini dimungkinkan untuk mengambil beberapa data {i>track<i} dari {i>frame<i} yang sama. Misalnya, jika Anda memanggil recordTrackData() dua kali pada frame yang sama selama perekaman, Anda akan mendapatkan kembali dua instance TrackData selama pemutaran.

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)

Setelah TrackData berada dalam objek penampung, ekstrak byte data kustom.

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!
}

Langkah selanjutnya