Android NDK ile kayıt yaparken özel veri ekleyin

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. ArRecordingConfig edinin.
  2. Özel UUID ile yeni bir ArTrack oluşturun. Tüm özel veriler buraya kaydedilir.
  3. ArTrack'i oturum yapılandırması sırasında oluşturduğunuz ArRecordingConfig öğesine 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 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."

// 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ı: 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.

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

Özel veri kanalları kaydetme

Tüm özel kanal verileri ArFrame hesabına kaydedilir. Artırılmış gerçeklik oturumlarında kare elde etmek için ArSession_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 ArFrame_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 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ı 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

ArFrame cihazında kaydedilen özel verileri almak için ArFrame_getUpdatedTrackData() numaralı telefonu arayın. Aynı çerçeveden birden fazla parça verisi alınabilir. Örneğin, kayıt sırasında aynı kareden ArFrame_recordTrackData()'i iki kez aradı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 baytlarca özel veri çı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);

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.