سجِّل جلسة الواقع المعزّز وشغِّلها على Android Foundation باستخدام تقنية الواقع المعزّز

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

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

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

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

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

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

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

يتم التسجيل

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

تسجيل جلسة ARCore

لتسجيل جلسة ARCore، يمكنك تهيئة الجلسة وتوفير معرف موارد منتظم (URI) بتنسيق MP4 للتسجيل. يُرجى الاتصال بالرقم ARRecordingManager.StartRecording() قبل استئناف الجلسة. يبدأ التسجيل تلقائيًا عند استئناف الجلسة. لإيقاف التسجيل تلقائيًا عند إيقاف الجلسة مؤقتًا، يمكنك الاتصال بالرقم ARRecordingConfig.AutoStopOnPause. لتسجيل جلسة جزئية، اتصل بالرقم ARRecordingManager.StartRecording() أثناء تشغيل الجلسة.

ARCoreRecordingConfig recordingConfig = ScriptableObject.CreateInstance<ARCoreRecordingConfig>();
Uri datasetUri = new System.Uri("file:///uri/for/dataset.mp4");
recordingConfig.Mp4DatasetUri = datasetUri.AbsoluteUri;

recordingManager.StartRecording(recordingConfig);

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

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

recordingManager.StopRecording();

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

يمكن استخدام ARRecordingManager.RecordingStatus في أي وقت لتحديد حالة التسجيل الحالية.

Debug.Log("Current Recording Status: " + recordingManager.RecordingStatus);

التشغيل

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

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

لتشغيل جلسة تم تسجيلها مسبقًا، اتّصِل بـ ARPlaybackManager.SetPlaybackDatasetUri() وقدِّم معرّف موارد منتظم (URI) لمجموعة البيانات التي تريد تشغيلها. يجب عليك إيقاف الجلسة مؤقتًا لاستخدام هذه الطريقة. استأنِف الجلسة كي يدخل التغيير حيز التنفيذ.

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

// Disable the ARSession to pause the current AR session.
session.enabled = false;

// In the next frame, provide a URI for the dataset you wish to play back.
Uri datasetUri = new System.Uri("file:///uri/for/dataset.mp4");
playbackManager.SetPlaybackDatasetUri(datasetUri);

// In the frame after that, re-enable the ARSession to resume the session from
// the beginning of the dataset.
session.enabled = true;

مشكلة معروفة والحل البديل

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

يمكن استخدام التعليمة البرمجية التالية كحل بديل.

// Workaround for known issue where `playbackManager.SetPlaybackDatasetUri()`
// returns `ErrorPlaybackFailed` because it can take several frames for a
// session to be paused.

// Reference to the ARSession component in the scene.
ARSession session;

void PlaybackDataset()
{
    setPlaybackDataset = true;

    // Pause the current AR session.
    session.enabled = false;

    // Set a timeout for retrying playback retrieval.
    timeout = 10f;
}

// Next frame
void Update()
{
    ...

    if (setPlaybackDataset)
    {
        PlaybackResult result = playbackManager.SetPlaybackDatasetUri(datasetUri);
        if (result == PlaybackResult.ErrorPlaybackFailed || result == PlaybackResult.SessionNotReady)
        {
            // Try to set the dataset again in the next frame.
            timeout -= Time.deltaTime;
        }
        else
        {
            // Do not set the timeout if the result is something other than ErrorPlaybackFailed.
            timeout = -1f;
        }

        if (timeout < 0.0f)
        {
            setPlaybackDataset = false;
            // If playback is successful, proceed as usual.
            // If playback is not successful, handle the error appropriately.
        }
    }

    ...
}

إيقاف تشغيل

لإيقاف تشغيل، اتصل بـ ARPlaybackManager.SetPlaybackDatasetUri() واضبط معرّف الموارد المنتظم (URI) لمجموعة البيانات على null.

// Disable the ARSession to pause the current AR session.
session.enabled = false;

// In the next frame, unset the playback dataset URI.
playbackManager.SetPlaybackDatasetUri(null);

// In the frame after that, re-enable the ARSession to resume the session using
// the device camera and other sensors.
session.enabled = true;

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

لبدء عملية تشغيل من بداية مجموعة البيانات، اطلب الرمز ARPlaybackManager.SetPlaybackDatasetUri() وحدِّد تسجيل MP4 نفسه قبل استئناف الجلسة.

// Disable the ARSession to pause the current AR session.
session.enabled = false;

// In the next frame, specify the same dataset URI.
playbackManager.SetPlaybackDatasetUri(datasetUri); // Same URI that was previously set.

// In the frame after that, re-enable the ARSession to resume the session from
// the beginning of the dataset.
session.enabled = true;

تشغيل جلسة أخرى

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

// Disable the ARSession to pause the current AR session.
session.enabled = false;

// In the next frame, specify a new dataset URI.
Uri newDatasetUri = new System.Uri("file:///uri/for/different/dataset.mp4");
playbackManager.SetPlaybackDatasetUri(newDatasetUri); // Different URI than was previously set.

// In the frame after that, re-enable the ARSession to resume the session from
// the beginning of the new dataset.
session.enabled = true;

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

يمكن استخدام ARPlaybackManager.PlaybackStatus في أي وقت لتحديد حالة التشغيل الحالية.

Debug.Log("Current Playback Status: " + playbackManager.PlaybackStatus);

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