הקלטה והפעלה של סשן AR ב-Android NDK

ממשק ה-API להקלטה ולהפעלה מאפשר להקליט נתוני וידאו ו-AR פעם אחת בסביבה נתונה, ולהשתמש בתוכן הזה כדי להחליף סשן מצלמה בשידור חי.

דרישות מוקדמות

לפני שממשיכים, חשוב לוודא שאתם מבינים את המושגים הבסיסיים של AR ואת האופן שבו מגדירים סשן של ARCore.

תאימות לממשקי API אחרים של ARCore

בגלל אופן העיבוד של נתוני סשנים, ממשקי ה-API של ARCore עשויים להניב תוצאות שונות במהלך ההפעלה מאלו שתועדו במהלך ההקלטה. הם עשויים גם להניב תוצאות שונות בהפעלות הבאות של ההפעלה. לדוגמה, מספר קובצי המעקב שזוהו, התזמון המדויק של הזיהוי שלהם ותנוחותיהם לאורך זמן עשויים להיות שונים במהלך ההפעלה.

תאימות לעוגנים בענן

אפשר לארח ולטפל במודעות עוגן בענן בזמן הקלטה או הפעלה של סשן.

מתבצע תיעוד

להתחיל, להפסיק ולבדוק את הסטטוס של הקלטה של סשן ARCore.

הקלטה של סשן ב-ARCore

כדי להקליט סשן ARCore, צריך להגדיר את הסשן ולספק MP4 URI להקלטה. יש להתקשר למספר 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));

הפסקת הקלטה

כדי להפסיק את ההקלטה בלי להשהות את סשן ה-AR שפועל כרגע, מתקשרים למספר 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.
}

הפעלה

להפעיל סשנים של AR שתועדו בעבר. הסשנים מופעלים בזמן אמת, ולא ניתן לשנות את הגדרות ההפעלה או המהירות.

הפעלת סשן שהוקלט בעבר

כדי להשמיע סשן שהוקלט בעבר, צריך להתקשר ל-ArSession_setPlaybackDatasetUri() לפני השיחה הראשונה אל ArSession_resume().

אחרי שההפעלה התחילה בעקבות הקריאה הראשונה ל-ArSession_resume(), השהיית הסשן באמצעות התקשרות אל ArSession_pause() תגרום להשהיית העיבוד של כל פריימים של התמונות מהמצלמה ושל כל נתוני החיישנים שתועדו במערך הנתונים. נתונים של מסגרות תמונה מהמצלמה והנתונים של מסגרות חיישנים שנמחקו באופן הזה לא יעובדו מחדש כשיחודשו שוב הסשן באמצעות קריאה ל-ArSession_resume(). בדרך כלל ייפגע המעקב ב-AR של הסשן עקב הפער בנתונים שעובדו.

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

מה השלב הבא?