অ্যান্ড্রয়েডকে লক্ষ্য করে AR ফাউন্ডেশনে একটি AR সেশন রেকর্ড করুন এবং প্লে ব্যাক করুন

রেকর্ডিং এবং প্লেব্যাক API আপনাকে একটি নির্দিষ্ট পরিবেশের মধ্যে একবার ভিডিও এবং AR ডেটা রেকর্ড করতে এবং একটি লাইভ ক্যামেরা সেশন প্রতিস্থাপন করতে সেই সামগ্রীটি ব্যবহার করতে সক্ষম করে।

পূর্বশর্ত

এগিয়ে যাওয়ার আগে নিশ্চিত করুন যে আপনি মৌলিক AR ধারণা এবং কীভাবে একটি ARCore সেশন কনফিগার করবেন তা বুঝতে পেরেছেন।

অন্যান্য ARCore API-এর সাথে সামঞ্জস্যপূর্ণ

সেশন ডেটা যেভাবে প্রক্রিয়া করা হয় তার কারণে, ARCore APIগুলি রেকর্ডিংয়ের সময় পর্যবেক্ষণের চেয়ে প্লেব্যাকের সময় ভিন্ন ফলাফল দিতে পারে। তারা পরবর্তী প্লেব্যাক সেশনের সময় বিভিন্ন ফলাফলও তৈরি করতে পারে। উদাহরণস্বরূপ, সনাক্ত করা ট্র্যাকেবলের সংখ্যা, তাদের সনাক্তকরণের সুনির্দিষ্ট সময় এবং সময়ের সাথে সাথে তাদের ভঙ্গি প্লেব্যাকের সময় ভিন্ন হতে পারে।

ক্লাউড অ্যাঙ্করগুলির সাথে সামঞ্জস্যপূর্ণ

আপনি একটি সেশন রেকর্ডিং বা প্লেব্যাক করার সময় ক্লাউড অ্যাঙ্কর হোস্ট এবং সমাধান করতে পারেন।

রেকর্ডিং

একটি ARCore সেশন রেকর্ডিং শুরু করুন, বন্ধ করুন এবং স্থিতি পরীক্ষা করুন।

একটি ARCore সেশন রেকর্ড করুন

একটি ARCore সেশন রেকর্ড করতে, সেশনটি কনফিগার করুন এবং রেকর্ডিংয়ের জন্য একটি MP4 URI প্রদান করুন। সেশন পুনরায় শুরু করার আগে 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);

একটি সেশন রেকর্ডিং বন্ধ করুন

বর্তমানে চলমান AR সেশনে বিরতি না দিয়ে রেকর্ডিং বন্ধ করতে, ARRecordingManager.StopRecording() এ কল করুন।

recordingManager.StopRecording();

রেকর্ডিং অবস্থা চেক করুন

বর্তমান রেকর্ডিং অবস্থা নির্ধারণ করতে ARRecordingManager.RecordingStatus যে কোনো সময় ব্যবহার করা যেতে পারে।

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

প্লেব্যাক

আগে রেকর্ড করা AR সেশন প্লে ব্যাক করুন। রিয়েল টাইমে সেশন প্লে ব্যাক হয় এবং সেশন প্লেব্যাক বা গতি সামঞ্জস্য করা যায় না।

পূর্বে রেকর্ড করা সেশন প্লেব্যাক

পূর্বে রেকর্ড করা সেশন প্লে ব্যাক করতে, ARPlaybackManager.SetPlaybackDatasetUri() কে কল করুন এবং আপনি যে ডেটাসেট ব্যাক করতে চান তার জন্য একটি URI প্রদান করুন। এই পদ্ধতিটি ব্যবহার করার জন্য আপনাকে অবশ্যই সেশনটি বিরতি দিতে হবে। পরিবর্তনটি কার্যকর হওয়ার জন্য সেশনটি পুনরায় শুরু করুন৷

একবার সেশন পুনরায় শুরু করার কারণে প্লেব্যাক শুরু হয়ে গেলে, ARSession নিষ্ক্রিয় করে সেশনটিকে বিরতি দিলে তা সমস্ত ক্যামেরা ইমেজ ফ্রেম এবং ডেটাসেটে অন্য কোনো রেকর্ড করা সেন্সর ডেটার প্রক্রিয়াকরণ স্থগিত করবে। ক্যামেরা ইমেজ ফ্রেম এবং সেন্সর ফ্রেম ডেটা যা এইভাবে বাতিল করা হয় সেশন পুনরায় শুরু করার মাধ্যমে সেশন পুনরায় শুরু হলে পুনরায় প্রক্রিয়া করা হবে না। সেশনের জন্য AR ট্র্যাকিং সাধারণত প্রক্রিয়াকৃত ডেটার ফাঁকের কারণে ক্ষতিগ্রস্ত হবে।

// 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);

এরপর কি