Android NDK-এ একটি AR সেশন রেকর্ড করুন এবং প্লে ব্যাক করুন

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

পূর্বশর্ত

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

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

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

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

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

রেকর্ডিং

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

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

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

শুরু থেকে প্লেব্যাক পুনরায় আরম্ভ করুন

ডেটাসেটের শুরু থেকে একটি প্লেব্যাক পুনরায় চালু করতে, সেশনটি বিরাম দিন এবং সেশন পুনরায় শুরু করার আগে একই MP4 রেকর্ডিং উল্লেখ করে ArSession_setPlaybackDatasetUri() কল করুন।

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

প্লেব্যাক স্থিতি পরীক্ষা করুন

বর্তমান ArPlaybackStatus নির্ধারণ করতে যেকোনো সময় ArSession_getPlaybackStatus() ব্যবহার করুন।

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

এরপর কি

,

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

পূর্বশর্ত

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

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

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

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

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

রেকর্ডিং

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

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

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

শুরু থেকে প্লেব্যাক পুনরায় আরম্ভ করুন

ডেটাসেটের শুরু থেকে একটি প্লেব্যাক পুনরায় চালু করতে, সেশনটি বিরাম দিন এবং সেশন পুনরায় শুরু করার আগে একই MP4 রেকর্ডিং উল্লেখ করে ArSession_setPlaybackDatasetUri() কল করুন।

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

প্লেব্যাক স্থিতি পরীক্ষা করুন

বর্তমান ArPlaybackStatus নির্ধারণ করতে যেকোনো সময় ArSession_getPlaybackStatus() ব্যবহার করুন।

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

এরপর কি