Android NDK ile kayıt yaparken özel veri ekleyin

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 tekrar oynattığında beklediği verileri geri alacak ş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 ArRecordingConfig edinin.
  2. Özel UUID ile yeni bir ArTrack oluşturun. Tüm özel veriler buraya kaydedilir.
  3. Oturum yapılandırması sırasında oluşturduğunuz ArRecordingConfig'e ArTrack kodunu ekleyin.
// 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);

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ı: Kanalı 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."

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

İsteğe bağlı: Kanalı bir MIME türüyle yapılandırma

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.

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

Özel veri kanallarını kaydetme

Tüm özel parça verileri ArFrame cihazlara kaydedilir. AR oturumlarında kare almak için ArSession_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 ArFrame_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ını kaydetmek için ArFrame_recordTrackData() numaralı telefonu arayın.

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

Ö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

ArFrame cihazında kaydedilen özel verileri almak için ArFrame_getUpdatedTrackData() numaralı telefonu arayın. Aynı kareden birden fazla parkur verisi alınabilir. Örneğin, kayıt sırasında aynı karede ArFrame_recordTrackData() hizmetini iki kez çağırdıysanız oynatma sırasında iki ArTrackData örneği geri alırsınız.

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

ArTrackData bir kapsayıcı nesnesine yerleştirildikten sonra özel verilerin baytlarını çıkarın.

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

Sırada ne var?

  • Kayıt ve özellikler ile kendi uygulamanızı nasıl geliştireceğinizi öğrenin Kayıt ve Oynatma codelab'i tıklayın.