داده های سفارشی را هنگام ضبط در اندروید اضافه کنید

Recording & Playback API به شما امکان می دهد یک جلسه را ضبط کنید و از آن به جای یک فید دوربین بیدرنگ استفاده کنید. با این حال، این ضبط‌ها فقط حاوی داده‌های ویدئویی و حسگر هستند. همچنین می‌توانید داده‌های سفارشی را به ضبط جلسه اضافه کنید و داده‌ها را در حین پخش به شما بازگردانید، گویی بخشی از یک تصویر دوربین است.

ARCore به طور خودکار هیچ داده سفارشی را در ضبط ها شامل نمی شود. در عوض، به شما امکان می دهد تا داده های سفارشی را در حین ضبط به یک فریم ARCore اضافه کنید و همان داده ها را در حین پخش از فریم بازیابی کنید. این به شما بستگی دارد که برنامه را به گونه ای برنامه ریزی کنید که کاربر هنگام پخش جلسه خود، داده های مورد انتظار خود را پس بگیرد.

از موارد برای داده های سفارشی استفاده کنید

افزودن داده‌های سفارشی به ضبط‌ها، امکانات برنامه‌های AR شما را افزایش می‌دهد. موارد زیر چند مورد استفاده خاص است.

از AR در حال حرکت استفاده کنید

در گذشته، کاربران فقط می توانستند در مکان و زمان مناسب به تجربیات AR دسترسی داشته باشند. اگر آنها می خواستند یک لامپ AR در اتاق نشیمن خود قرار دهند، باید به صورت فیزیکی در محل بایستند تا ببینند لامپ در آنجا چگونه به نظر می رسد. با استفاده از آهنگ های سفارشی، آنها می توانند یک بار اتاق نشیمن خود را ضبط کنند و هر زمان که دوست داشتند مبلمان مجازی را به صحنه اضافه کنند.

تجربیات AR را به صورت مشترک ایجاد کنید

بدون نیاز به جلسه زنده، کاربران گزینه های بیشتری برای ویرایش AR دارند که به آنها امکان می دهد محتوای AR منحصر به فرد را در هر مکان و زمانی ایجاد کنند و به آن دسترسی داشته باشند. به عنوان مثال، آنها می توانند یک محیط معین را ضبط کنند، جلوه های واقعیت افزوده را اضافه کنند و آنها را با دوستان خود به اشتراک بگذارند.

پیش نیازها

قبل از ادامه، مطمئن شوید که مفاهیم اساسی AR و نحوه پیکربندی یک جلسه ARCore را درک کرده اید.

با داده های سفارشی ضبط کنید

یک جلسه ضبط شده با داده های سفارشی ایجاد کنید.

یک ضبط را با داده های سفارشی راه اندازی کنید

این مراحل را برای مقداردهی اولیه یک ضبط با داده های سفارشی دنبال کنید. برای شروع، توقف و بررسی جلسه ضبط، لطفاً به ضبط و پخش یک جلسه AR مراجعه کنید.

  1. RecordingConfig را دریافت کنید.
  2. یک Track جدید با یک UUID سفارشی ایجاد کنید. تمام داده های سفارشی در اینجا ذخیره می شود.
  3. Track به RecordingConfig که در طول پیکربندی جلسه ایجاد کردید اضافه کنید.

جاوا

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

کاتلین

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

همه آهنگ‌های جدید به‌عنوان ضبط‌های جداگانه در نظر گرفته می‌شوند و هر آهنگ ضبط‌شده UUID خاص خود را اشغال می‌کند.

اختیاری: مسیر را با داده های اضافی پیکربندی کنید

در صورتی که می‌خواهید بعداً آن را شناسایی کنید، می‌توانید آهنگی را با داده‌های اضافی که ضبط جلسه را توصیف می‌کند، پیکربندی کنید. برای مثال، می‌توانید با افزودن یادداشتی که مکان و زمانی را که جلسه را ضبط کرده‌اید، یک آهنگ را «تگ» کنید: «این جلسه بعد از ظهر در مرکز خرید ضبط شد».

جاوا

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

کاتلین

// Set additional data on this track.
// For example, describe where you recorded the session.
val customTrackData: ByteArray = "airport".toByteArray()
track.setMetadata(ByteBuffer.wrap(customTrackData))

اختیاری: آهنگ را با نوع MIME پیکربندی کنید

اگر برنامه شما باید با ابزارهای خارجی سازگار باشد، می‌توانید آهنگی را با نوع MIME پیکربندی کنید که نوع داده‌های ضبط‌شده در مسیر را توصیف می‌کند. اگر یک نوع را مشخص نکنید، داده ها به عنوان application/text دسته بندی می شوند. ARCore هنگام خواندن داده ها، نوع MIME را نادیده می گیرد.

جاوا

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

کاتلین

// Set a MIME type for compatibility with external tools.
track.setMimeType("text/csv")

آهنگ های داده سفارشی را ضبط کنید

تمام داده های آهنگ سفارشی بر روی Frame s ثبت می شود. جلسات AR از session.update() برای دریافت فریم استفاده می کنند. زمانی که داده ها را روی یک فریم ضبط می کنید، همان زمانی است که داده ها در حین پخش بازگردانده می شوند. برای مثال، اگر در 00:07:02 recordTrackData() را با مقدار "A" فراخوانی کنید، هنگام پخش آهنگ، "A" را در علامت 00:07:02 دریافت خواهید کرد.

برای ضبط یک مسیر داده سفارشی، داده ها را به ByteBuffer تبدیل کنید و recordTrackData() را فراخوانی کنید.

جاوا

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

کاتلین

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

آهنگ های داده سفارشی را پخش کنید

استخراج داده های سفارشی از ضبط جلسه در حین پخش.

پخش را آغاز کنید

راه‌اندازی پخش با داده‌های سفارشی مانند راه‌اندازی پخش یک ضبط معمولی جلسه است.

داده های سفارشی را برگردانید

برای بازیابی اطلاعات سفارشی ثبت شده روی یک فریم getUpdatedTrackData() فراخوانی کنید. امکان بازیابی داده های چند آهنگ از یک فریم وجود دارد. به عنوان مثال، اگر در حین ضبط دو بار روی یک فریم recordTrackData() فراخوانی کنید، در حین پخش دو نمونه از TrackData را دریافت خواهید کرد.

جاوا

// Fetch the data recorded on a select frame and place it in a container object.
Collection<TrackData> trackDataList = frame.getUpdatedTrackData(trackUUID);

کاتلین

// Fetch the data recorded on a select frame and place it in a container object.
val trackDataList: Collection<TrackData> = frame.getUpdatedTrackData(trackUUID)

هنگامی که TrackData در یک شی کانتینر قرار گرفت، بایت های داده سفارشی را استخراج کنید.

جاوا

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

کاتلین

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

بعدش چی