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.
- Bir
RecordingConfig
edinin. - Özel UUID ile yeni bir
Track
oluşturun. Tüm özel veriler buraya kaydedilir. Track
'u oturum yapılandırması sırasında oluşturduğunuzRecordingConfig
'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.