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

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

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

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

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

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

التوافق مع "ثبات السحابة الإلكترونية"

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

يتم التسجيل

بدء تسجيل جلسة 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.
}

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