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

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

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

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

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

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

التوافق مع Cloud Anchors

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

يتم التسجيل

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

تسجيل جلسة ARCore

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

ArRecordingConfig* recording_config = nullptr;
ArRecordingConfig_create(ar_session, &recording_config);
ArRecordingConfig_setMp4DatasetUri(ar_session, recording_config,
                                   mp4_dataset_uri);
ArRecordingConfig_setAutoStopOnPause(ar_session, recording_config, true);

CHECK(ArSession_startRecording(ar_session, recording_config));
// …
// Resume ARCore session to start recording.
CHECK(ArSession_resume(ar_session));
// …
// Recording ends.
CHECK(ArSession_pause(ar_session));

إيقاف تسجيل

لإيقاف التسجيل بدون إيقاف جلسة الواقع المعزّز قيد التشغيل حاليًا، يُرجى الاتصال ArSession_stopRecording() وArRecordingConfig_destroy()

ArStatus status = ArSession_stopRecording(ar_session);
ArRecordingConfig_destroy(recording_config);

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

ArSession_getRecordingStatus() ويمكن استخدامها في أي وقت لتحديد ArRecordingStatus الحالي.

ArRecordingStatus recording_status;
// Can be called at any time.
ArSession_getRecordingStatus(ar_session, &recording_status);
if (recording_status == AR_RECORDING_NONE) {
  // The dataset recorder is not recording.
} else if (recording_status == AR_RECORDING_OK) {
  // The dataset recorder is recording normally.
} else if (recording_status == AR_RECORDING_IO_ERROR) {
  // The dataset recorder encountered an error while recording.
}

التشغيل

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

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

لتشغيل جلسة مسجّلة سابقًا، يمكنك الاتصال ArSession_setPlaybackDatasetUri() قبل المكالمة الأولى ArSession_resume()

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

// Specify previously recorded MP4 file.
CHECK(ArSession_setPlaybackDatasetUri(ar_session, mp4_dataset_uri));
// …
// Playback starts from the beginning of the dataset.
CHECK(ArSession_resume(ar_session));
// …
// Pause AR session, but allow playback to silently continue.
CHECK(ArSession_pause(ar_session));
// …
// Resume AR session. Playback continues with gap to paused session.
CHECK(ArSession_resume(ar_session));

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

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

CHECK(ArSession_pause(ar_session));
// Pause and specify the *same* dataset:
CHECK(ArSession_setPlaybackDatasetUri(ar_session, mp4_dataset_uri));
// Playback starts from the *beginning* of the dataset.
CHECK(ArSession_resume(ar_session));

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

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

CHECK(ArSession_pause(ar_session));
// Pause and specify a *different* dataset:
CHECK(ArSession_setPlaybackDatasetUri(ar_session, other_mp4_dataset_uri));
// Playback starts from the *beginning* of the new dataset.
CHECK(ArSession_resume(ar_session));

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

استخدام ArSession_getPlaybackStatus() في أي وقت لتحديد القيمة الحالية ArPlaybackStatus

ArPlaybackStatus playback_status;
// Can be called at any time.
ArSession_getPlaybackStatus(ar_session, &playback_status);
if (playback_status == AR_PLAYBACK_NONE) {
  // The session is not playing back an MP4 dataset file.
} else if (playback_status == AR_PLAYBACK_OK) {
  // Playback is in process without issues.
} else if (playback_status == AR_PLAYBACK_IO_ERROR) {
  // Playback has stopped due to an error.
} else if (playback_status == AR_PLAYBACK_FINISHED) {
  // Playback has finished successfully.
}

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