تسجيل جلسة الواقع المعزّز وتشغيلها على جهاز Android

التسجيل تتيح لك واجهة برمجة تطبيقات التشغيل تسجيل الفيديو وبيانات الواقع المعزّز مرة واحدة داخل بيئة معيّنة واستخدام ذلك المحتوى بدلاً من جلسة الكاميرا المباشرة.

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

احرص على فهم المفاهيم الأساسية للواقع المعزّز. وكيفية ضبط جلسة ARCore قبل المتابعة.

التوافق مع واجهات برمجة تطبيقات ARCore الأخرى

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

التوافق مع الكاميرا المشتركة

يمكن تسجيل الجلسات التي تستخدم الكاميرا المشتركة. ومع ذلك، لا يمكن حاليًا تشغيل هذه الجلسات باستخدام وضع "الكاميرا المشتركة".

التوافق مع Cloud Anchors

يمكنك استضافة Cloud Anchors وحلّ مشاكله أثناء تسجيل جلسة أو تشغيلها.

يتم التسجيل

بدء تسجيل جلسة ARCore وإيقافه والتحقّق من حالته

تسجيل جلسة ARCore

لتسجيل جلسة ARCore، يجب ضبط الجلسة وتوفير معرف موارد منتظم (URI) بتنسيق MP4 للتسجيل. يمكنك الاتصال بالرقم session.startRecording() قبل المكالمة الأولى إلى الرقم session.resume(). يبدأ التسجيل تلقائيًا عند استئناف الجلسة. لإيقاف التسجيل تلقائيًا عند إيقاف الجلسة مؤقتًا، يمكنك الاتصال بالرقم RecordingConfig.setAutoStopOnPause(). لتسجيل جلسة جزئية، يمكنك الاتصال بالرقم session.startRecording() أثناء تنفيذ الجلسة.

Java

// Configure the ARCore session.
Session session = new Session(context);
Uri destination = Uri.fromFile(new File(context.getFilesDir(), "recording.mp4"));
RecordingConfig recordingConfig =
        new RecordingConfig(session)
        .setMp4DatasetUri(destination)
        .setAutoStopOnPause(true);
try {
  // Prepare the session for recording, but do not start recording yet.
  session.startRecording(recordingConfig);
} catch (RecordingFailedException e) {
  Log.e(TAG, "Failed to start recording", e);
}

// Resume the ARCore session to start recording.
session.resume();

Kotlin

// Configure the ARCore session.
val session = Session(context)
val destination = Uri.fromFile(File(context.getFilesDir(), "recording.mp4"))
val recordingConfig = RecordingConfig(session)
  .setMp4DatasetUri(destination)
  .setAutoStopOnPause(true)
session.startRecording(recordingConfig)

// Resume the ARCore session to start recording.
session.resume()

إيقاف تسجيل جلسة

لإيقاف التسجيل بدون إيقاف جلسة الواقع المعزّز قيد التشغيل حاليًا، يمكنك الاتصال بالرقم session.stopRecording().

Java

try {
  session.stopRecording();  // Stop recording.
} catch (RecordingFailedException e) {
  Log.e(TAG, "Failed to stop recording", e);
}

Kotlin

session.stopRecording()

التحقّق من حالة التسجيل

يمكن استخدام session.getRecordingStatus() في أي وقت لتحديد RecordingStatus الحالي.

Java

// Use any time to determine current RecordingStatus.
if (session.getRecordingStatus() == RecordingStatus.OK) {
  // Update the UI to show that the session is currently being recorded.
}

Kotlin

// Use any time to determine current RecordingStatus.
if (session.recordingStatus == RecordingStatus.OK) {
  // Update the UI to show that the session is currently being recorded.
}

التشغيل

تشغيل جلسات الواقع المعزّز المسجّلة سابقًا يتم تشغيل الجلسات في الوقت الفعلي، ولا يمكن ضبط تشغيل الجلسة أو سرعتها.

تشغيل جلسة مسجّلة سابقًا

لتشغيل جلسة تم تسجيلها سابقًا، اتّصِل بالرقم session.setPlaybackDatasetUri() قبل المكالمة الأولى مع session.resume().

بعد بدء التشغيل بسبب تلقّي المكالمة الأولى على الرقم session.resume()، سيؤدي إيقاف الجلسة مؤقتًا من خلال طلب الرقم session.pause() إلى تعليق معالجة جميع إطارات صور الكاميرا وأي بيانات مسجَّلة أخرى لأداة الاستشعار في مجموعة البيانات. إنّ إطارات صور الكاميرا وبيانات إطار أداة الاستشعار التي تم تجاهلها بهذه الطريقة لن تتم إعادة معالجتها عند استئناف الجلسة من خلال الاتصال بالرقم session.resume(). سيتأثر تتبُّع الواقع المعزّز للجلسة بشكل عام بسبب الفجوة في البيانات التي تمت معالجتها.

Java

// Configure the ARCore session.
Session session = new Session(context);

// Specify the previously recorded MP4 file.
Uri recordingUri = Uri.fromFile(new File(context.getFilesDir(), "recording.mp4"));
session.setPlaybackDatasetUri(recordingUri);
…

// Start playback from the beginning of the dataset.
session.resume();
…

// Pause the AR session, but silently continue MP4 playback. Camera frames
// and other recorded sensor data is discarded while the session is paused.
session.pause();
…

// Resume the AR session. Camera frames and other sensor data from the MP4
// that was silently played back while the session was paused is not
// processed by ARCore.
session.resume();

Kotlin

// Configure the ARCore session.
val session = Session(context)

// Specify the previously recorded MP4 file.
val recordingUri = Uri.fromFile(File(context.filesDir, "recording.mp4"))
session.playbackDatasetUri = recordingUri
…

// Start playback from the beginning of the dataset.
session.resume()
…

// Pause the AR session, but silently continue MP4 playback. Camera frames
// and other recorded sensor data is discarded while the session is paused.
session.pause()
…

// Resume the AR session. Camera frames and other sensor data from the MP4
// that was silently played back while the session was paused is not
// processed by ARCore.
session.resume()

إعادة التشغيل من البداية

لإعادة تشغيل المحتوى من بداية مجموعة البيانات، أوقِف الجلسة مؤقتًا واطلب session.setPlaybackDatasetUri()، مع تحديد تسجيل MP4 نفسه قبل استئناف الجلسة.

Java

session.pause();
// Pause and specify the SAME dataset:
session.setPlaybackDatasetUri(previousRecordingUri);
session.resume();  // Playback starts from the BEGINNING of the dataset.

Kotlin

session.pause()
// Pause and specify the SAME dataset:
session.playbackDatasetUri = previousRecordingUri
session.resume()  // Playback starts from the BEGINNING of the dataset.

تشغيل جلسة مختلفة

لتشغيل مجموعة بيانات مختلفة، قم بإيقاف الجلسة مؤقتًا وحدد مجموعة البيانات الجديدة قبل استئناف الجلسة.

Java

// Switch to a different dataset.
session.pause();   // Pause the playback of the first dataset.
// Specify a different dataset to use.
session.setPlaybackDatasetUri(newRecordingUri);
session.resume();  // Start playback from the beginning of the new dataset.

Kotlin

// Switch to a different dataset.
session.pause()   // Pause the playback of the first dataset.
// Specify a different dataset to use.
session.playbackDatasetUri = newRecordingUri
session.resume()  // Start playback from the beginning of the new dataset.

التحقّق من حالة التشغيل

يمكنك استخدام session.getPlaybackStatus() في أي وقت لتحديد القيمة الحالية. PlaybackStatus

Java

// Use any time to determine current PlaybackStatus.
if (session.getPlaybackStatus() != PlaybackStatus.OK) {
  // Update the UI to show that the session playback has finished.
}

Kotlin

// Use any time to determine current PlaybackStatus.
if (session.playbackStatus != PlaybackStatus.OK) {
  // Update the UI to show that the session playback has finished.
}

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