إضافة بيانات مخصّصة أثناء التسجيل على جهاز Android

التسجيل تتيح لك واجهة برمجة التطبيقات التعاون API تسجيل جلسة واستخدامها بدلاً من خلاصة الكاميرا في الوقت الفعلي. ومع ذلك، لا تتضمّن هذه التسجيلات سوى بيانات الفيديو وجهاز الاستشعار. يمكنك أيضًا إضافة بيانات مخصّصة إلى تسجيل جلسة وعرض البيانات أثناء التشغيل، كما لو كانت جزءًا من صورة كاميرا.

لا يضمِّن ARCore تلقائيًا أي بيانات مخصّصة في التسجيلات. بدلاً من ذلك، تسمح لك هذه الميزة بإضافة بيانات مخصّصة إلى إطار ARCore أثناء التسجيل، واسترداد البيانات نفسها من الإطار أثناء التشغيل. الأمر متروك لك لبرمجة التطبيق بطريقة تتيح للمستخدم استعادة البيانات التي يتوقعها عند تشغيل الجلسة مرة أخرى.

حالات الاستخدام للبيانات المخصّصة

تؤدي إضافة بيانات مخصّصة إلى التسجيلات إلى زيادة فرص ظهور تطبيقات الواقع المعزّز. في ما يلي بعض حالات الاستخدام المحدّدة:

استخدام "الواقع المعزّز" أثناء التنقّل

في السابق، كان بإمكان المستخدمين الوصول إلى تجارب الواقع المعزّز في المكان والوقت المناسبَين فقط. إذا أرادوا وضع مصباح بتقنية الواقع المعزّز في غرفة المعيشة، فعليهم الوقوف فعليًا في الموقع لمعرفة كيف سيبدو المصباح هناك. وبفضل المقاطع الصوتية المخصّصة، يمكنهم تسجيل محتوى غرفة المعيشة مرة واحدة وإضافة أثاث افتراضي إلى المشهد متى شاؤوا.

التعاون في إنشاء تجارب الواقع المعزّز

بدون الحاجة إلى جلسة مباشرة، تتوفّر للمستخدمين خيارات إضافية كثيرة لتعديل المحتوى المعزّز بالواقع، ما يتيح لهم إنشاء محتوى فريد باستخدام ميزة الواقع المعزّز والوصول إليه في أي مكان ووقت. على سبيل المثال، يمكنهم تسجيل بيئة معيّنة وإضافة تأثيرات الواقع المعزّز ومشاركتها مع الأصدقاء.

المتطلبات الأساسية

تأكَّد من فهم مفاهيم الواقع المعزّز الأساسية وكيفية ضبط جلسة ARCore قبل المتابعة.

التسجيل باستخدام بيانات مخصّصة

إنشاء تسجيل جلسة باستخدام بيانات مخصّصة

إعداد تسجيل باستخدام بيانات مخصّصة

اتّبِع الخطوات التالية لإعداد تسجيل باستخدام بيانات مخصّصة. لبدء جلسة تسجيل وإيقافها والتحقّق منها، يُرجى الاطّلاع على تسجيل جلسة الواقع المعزّز وتشغيلها.

  1. احصل على RecordingConfig.
  2. يمكنك إنشاء Track جديد باستخدام معرّف فريد عالمي (UUID) مخصّص. سيتم حفظ جميع البيانات المخصّصة هنا.
  3. أضِف Track إلى RecordingConfig الذي أنشأته أثناء ضبط الجلسة.

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)

يتم التعامل مع جميع المقاطع الصوتية الجديدة كتسجيلات منفصلة، ويشغل كل مقطع صوتي مسجَّل المعرّف الفريد العالمي الخاص به.

اختياري: ضبط المقطع الصوتي باستخدام بيانات إضافية

إذا أردت تحديده لاحقًا، يمكنك ضبط مقطع صوتي يتضمّن بيانات إضافية تصف تسجيل الجلسة. على سبيل المثال، يمكنك "وضع علامة" على مقطع صوتي من خلال إضافة ملاحظة تصف الموقع والوقت اللذين سجّلت فيهما الجلسة: "تم تسجيل هذه الجلسة في المركز التجاري بعد الظهر".

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

اختياري: ضبط المقطع الصوتي باستخدام نوع MIME

إذا كان يجب أن يكون تطبيقك متوافقًا مع أدوات خارجية، يمكنك إعداد مسار باستخدام نوع MIME يصف نوع البيانات المسجّلة في المسار. إذا لم تحدّد نوعًا، سيتم تصنيف البيانات على أنّها application/text. يتجاهل ARCore نوع MIME عند قراءة البيانات.

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

تسجيل مسارات البيانات المخصّصة

يتم تسجيل جميع بيانات المقطع الصوتي المخصّصة في Frame. تستخدِم جلسات الواقع المعزّز session.update() للحصول على إطار. ويكون الوقت الذي تسجّل فيه البيانات على إطار هو الوقت نفسه الذي سيتم فيه عرض البيانات أثناء التشغيل. على سبيل المثال، عند الاتصال بـ recordTrackData() مع القيمة "A" على 00:07:02، ستظهر لك العلامة "A" عند العلامة 00:07:02 عند إعادة تشغيل المقطع الصوتي.

لتسجيل مسار بيانات مخصّص، عليك تحويل البيانات إلى ByteBuffer ثم استدعاء recordTrackData().

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

تشغيل مسارات البيانات المخصّصة

يمكنك استخراج البيانات المخصّصة من تسجيل جلسة أثناء التشغيل.

تهيئة التشغيل

يشبه بدء التشغيل باستخدام بيانات مخصصة عملية تهيئة تشغيل تسجيل جلسة عادية.

عرض البيانات المخصّصة

اتصل بالرقم getUpdatedTrackData() لاسترداد البيانات المخصّصة المسجّلة في إطار. من الممكن استرداد بيانات مسارات متعددة من اللقطة نفسها. على سبيل المثال، إذا اتصلت بـ recordTrackData() مرتين على الإطار نفسه أثناء التسجيل، ستتم استعادة نسختين من TrackData أثناء التشغيل.

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 في كائن حاوية، استخرِج وحدات البايت للبيانات المخصَّصة.

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

الخطوات التالية