تتيح لك Recording & Playback API تسجيل بيانات الفيديو والواقع المعزّز مرة واحدة في بيئة معيّنة واستخدام هذا المحتوى لاستبدال جلسة كاميرا مباشرة.
المتطلبات الأساسية
احرص على فهم مفاهيم الواقع المعزّز الأساسية وكيفية ضبط جلسة ARCore قبل المتابعة.
التوافق مع واجهات برمجة تطبيقات ARCore الأخرى
بسبب طريقة معالجة بيانات الجلسة، قد تؤدي واجهات برمجة التطبيقات ARCore إلى ظهور نتائج مختلفة أثناء التشغيل مقارنةً بما تم تسجيله. وقد تؤدي أيضًا إلى نتائج مختلفة خلال جلسات التشغيل اللاحقة. على سبيل المثال، قد يختلف عدد الأجهزة القابلة للتتبّع التي يتم رصدها وتوقيت رصدها وأوضاعها مع مرور الوقت أثناء التشغيل.
التوافق مع ميزة "تثبيت العناصر في السحابة الإلكترونية"
يمكنك استضافة نقاط تثبيت السحابة الإلكترونية وحلّها أثناء تسجيل جلسة أو تشغيلها.
جارٍ التسجيل
بدء تسجيل جلسة ARCore وإيقافه والتحقّق من حالته
تسجيل جلسة ARCore
لتسجيل جلسة ARCore، عليك ضبط الجلسة وتوفير عنوان URL لملف 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()
وقدِّم عنوان URL لمجموعة البيانات التي تريد تشغيلها. يجب إيقاف الجلسة مؤقتًا
لاستخدام هذه الطريقة. استئنِف الجلسة لكي يسري التغيُّر.
بعد بدء التشغيل بسبب استئناف الجلسة، سيؤدي إيقاف الجلسة عن طريق إيقاف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;
مشكلة معروفة وحلّ بديل
هناك مشكلة معروفة تؤدي إلى عرض ErrorPlaybackFailed
عند إجراء مكالمات إلى ARPlaybackManager.SetPlaybackDatasetUri()
.
ويحدث ذلك بسبب أن إيقاف الجلسة مؤقتًا قد يستغرق عدة إطارات. إذا تمّت الدعوة إلى
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);
الخطوات التالية
- تعرّف على كيفية إضافة بيانات مخصّصة إلى الجلسات المسجّلة.