Android'de kayıt sırasında özel veri ekleme

Kaydetme ve Oynatma API'si, bir oturum kaydedip gerçek zamanlı kamera feed'i yerine kullanmanızı sağlar. Ancak bu kayıtlar yalnızca video ve sensör verileri içerir. Ayrıca, bir oturum kaydına özel veriler ekleyebilir ve bu verilerin, sanki bir kamera görüntüsünün parçasıymış gibi oynatma sırasında size döndürülmesini sağlayabilirsiniz.

ARCore, kayıtlara özel verileri otomatik olarak dahil etmez. Aksine, kayıt sırasında bir ARCore çerçevesine özel veriler eklemenize ve aynı verileri oynatma sırasında kareden almanıza olanak tanır. Uygulamayı, kullanıcının oturumunu oynattığında beklediği verileri geri alacağı şekilde programlamak sizin sorumluluğunuzdadır.

Özel veriler için kullanım alanları

Kayıtlara özel verilerin eklenmesi, artırılmış gerçeklik (AR) uygulamalarınızın olasılıklarını artırır. Aşağıda bazı özel kullanım alanları verilmiştir.

Artırılmış gerçeklik (AR) hareket halindeyken kullanın

Geçmişte kullanıcılar artırılmış gerçeklik deneyimlerine yalnızca doğru yerde ve doğru zamanda erişebiliyordu. Salonlarına AR lambası yerleştirmek istediklerinde, lambanın oraya nasıl göründüğüne bakmak için fiziksel olarak ilgili yerde durmaları gerekiyordu. Özel parçalarla, oturma odalarına bir kez kayıt yapabilirler ve istedikleri zaman sahneye sanal mobilyalar ekleyebilirler.

Artırılmış gerçeklik deneyimlerini birlikte oluşturun

Canlı oturum şartı olmadan kullanıcılar, AR düzenleme için çok daha fazla seçeneğe sahip olur. Böylece, kullanıcılar her zaman ve her yerde benzersiz AR içeriği oluşturup bu içeriklere erişebilir. Örneğin, belirli bir ortamı kaydedebilir, artırılmış gerçeklik efektleri ekleyebilir ve bunları arkadaşlarıyla paylaşabilirler.

Ön koşullar

Devam etmeden önce temel AR kavramlarını ve ARCore oturumunu nasıl yapılandıracağınızı anladığınızdan emin olun.

Özel verilerle kaydedin

Özel verilerle bir oturum kaydı oluşturun.

Özel verilerle kaydı başlatma

Bir kaydı özel verilerle başlatmak için aşağıdaki adımları uygulayın. Bir kayıt oturumunu başlatmak, durdurmak ve kontrol etmek için lütfen AR oturumunu kaydetme ve oynatma başlıklı makaleye bakın.

  1. RecordingConfig edinin.
  2. Özel UUID ile yeni bir Track oluşturun. Tüm özel veriler buraya kaydedilir.
  3. Track'i oturum yapılandırması sırasında oluşturduğunuz RecordingConfig öğesine ekleyin.

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)

Tüm yeni parçalar ayrı kayıtlar olarak değerlendirilir. Kaydedilen her parça kendi UUID'sine sahip olur.

İsteğe bağlı: Parçayı ek verilerle yapılandırın

Kimliği daha sonra tanımlamak isterseniz, oturum kaydını açıklayan ek verilerle bir kanal yapılandırabilirsiniz. Örneğin, oturumu kaydettiğiniz konumu ve saati açıklayan bir not ekleyerek bir parkuru "etiketleyebilirsiniz": "Bu oturum öğleden sonra alışveriş merkezinde kaydedildi."

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

İsteğe bağlı: Parçayı MIME türüyle yapılandırın

Uygulamanızın harici araçlarla uyumlu olması gerekiyorsa, kanalda kaydedilen veri türünü açıklayan MIME türüne sahip bir kanal yapılandırabilirsiniz. Tür belirtmezseniz veriler application/text olarak sınıflandırılır. ARCore, verileri okurken MIME türünü yoksayar.

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

Özel veri kanalları kaydetme

Tüm özel kanal verileri Frame hesabına kaydedilir. Artırılmış gerçeklik oturumlarında kare elde etmek için session.update() kullanılır. Bir kareye veri kaydettiğiniz saat, oynatma sırasında verilerin döndürüleceği zamanla aynıdır. Örneğin, 00:07:02 konumunda "A" değeriyle recordTrackData() çağrısı yaparsanız parça çalındığında 00:07:02 işaretinde "A"yı geri alırsınız.

Özel bir veri kanalı kaydetmek için verileri ByteBuffer biçimine dönüştürün ve recordTrackData() numaralı telefonu arayın.

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

Özel veri kanallarını oynatma

Oynatma sırasında bir oturum kaydından özel verileri çıkarın.

Oynatmayı başlatma

Oynatmanın özel verilerle başlatılması, normal bir oturum kaydının oynatılmasını başlatmakla aynıdır.

Özel verileri döndür

Bir kareye kaydedilen özel verileri almak için getUpdatedTrackData() numaralı telefonu arayın. Aynı çerçeveden birden fazla parça verisi alınabilir. Örneğin, kayıt sırasında aynı kareden recordTrackData()'i iki kez aradıysanız oynatma sırasında iki TrackData örneği geri alırsınız.

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)

TrackData bir kapsayıcı nesnesine yerleştirildikten sonra baytlarca özel veri çıkarın.

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

Sonraki adımlar

  • Kayıt ve Oynatma codelab'ine göz atarak Kayıt ve Oynatma özelliğini kullanarak kendi uygulamanızı nasıl oluşturacağınızı öğrenin.