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

Kayıt ve Oynatma API'si oturum kaydedip gerçek zamanlı kamera feed'i yerine kullanmanıza olanak tanır. Ancak bu kayıtlar yalnızca video ve sensör verilerini içerir. Ayrıca, oturum kaydına özel veriler ekleyebilir ve bu verilerin 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 otomatik olarak özel veriler dahil etmez. Bunun yerine, kayıt sırasında bir ARCore karesine özel veriler eklemenize ve oynatma sırasında aynı verileri kareden almanıza olanak tanır. Uygulamayı, kullanıcı oturumunu oynattığında beklediği verileri alacağı şekilde programlamak size bağlıdır.

Özel verilerin kullanım alanları

Kayıtlara özel verilerin eklenmesi, artırılmış gerçeklik (AR) uygulamalarınız için daha fazla fırsat sunar. Aşağıda bazı özel kullanım alanları yer almaktadır.

Hareket halindeyken artırılmış gerçeklik (AR) kullanın

Geçmişte kullanıcılar AR deneyimlerine yalnızca doğru yerde ve doğru zamanda erişebiliyordu. Salonlarına AR lambası yerleştirmek istediklerinde, lambanın orada nasıl görüneceğine bakmak için fiziksel olarak aynı yerde durmaları gerekiyordu. Özel pistler sayesinde salonlarını bir kez kaydedebilir ve istedikleri zaman sanal mobilyaları sahneye koyabilirler.

Birlikte artırılmış gerçeklik (AR) deneyimleri oluşturun

Kullanıcılar, canlı oturum açma zorunluluğu olmadan AR düzenleme için çok daha fazla seçeneğe sahip olacak. Bu sayede kullanıcılar istedikleri zaman ve yerde benzersiz AR içeriği oluşturup bunlara erişebiliyor. Örneğin, belirli bir ortamı kaydedebilir, artırılmış gerçeklik efektleri ekleyebilir ve bunları arkadaşlarıyla paylaşabilirler.

Ön koşullar

Temel artırılmış gerçeklik kavramlarını anladığınızdan emin olun ve devam etmeden önce ARCore oturumunun nasıl yapılandırılacağı hakkında daha fazla bilgi edinin.

Özel verilerle kaydedin

Özel verilerle oturum kaydı oluşturun.

Özel verilerle kaydı başlatma

Özel verilerle bir kaydı başlatmak için aşağıdaki adımları uygulayın. Kayıt oturumunu başlatmak, durdurmak ve kontrol etmek için lütfen AR oturumunu kaydetme ve oynatma başlıklı makaleyi inceleyin.

  1. Bir RecordingConfig edinin.
  2. Özel UUID ile yeni bir Track oluşturun. Tüm özel veriler buraya kaydedilir.
  3. Track'u oturum yapılandırması sırasında oluşturduğunuz RecordingConfig'e 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 ele alınır ve kaydedilen her parça kendi UUID'sini kullanır.

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

Daha sonra tanımlamak isterseniz oturum kaydını açıklayan ek verilerle bir parça yapılandırabilirsiniz. Örneğin, oturumu kaydettiğiniz yeri ve zamanı açıklayan bir not ekleyerek parçayı "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 parçaya, parçaya kaydedilen veri türünü açıklayan bir MIME türü atayabilirsiniz. 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ını kaydetme

Tüm özel parça verileri Frame cihazlara kaydedilir. AR oturumlarında kare almak için session.update() kullanılır. Bir kareye veri kaydettiğiniz zaman, verilerin oynatma sırasında döndürüleceği zamanla aynıdır. Örneğin, 00:07:02 adlı parçada recordTrackData() öğesini "A" değeriyle çağırırsanız parça oynatıldığında 00:07:02 işaretinde "A" harfini geri alırsınız.

Özel bir veri kanalı kaydetmek için verileri ByteBuffer'e 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ı oynat

Oynatma sırasında bir oturum kaydından özel verileri ayıklayın.

Oynatmayı başlatma

Özel verilerle oynatmanın başlatılması normal bir oturum kaydının oynatılmasını başlatma ile aynıdır.

Özel verileri döndür

Bir kareye kaydedilen özel verileri almak için getUpdatedTrackData() numaralı telefonu arayın. Aynı kareden birden fazla parkur verisi alınabilir. Örneğin, kayıt sırasında aynı karede recordTrackData() hizmetini iki kez çağırdı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 özel verilerin baytlarını çı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!
}

Sırada ne var?

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