পণ্যের খবর
একক বৈশিষ্ট্যের ঊর্ধ্বে: CameraX 1.5-এর মাধ্যমে বৈশিষ্ট্যের সমন্বয়ের নিশ্চয়তা
৬ মিনিটের পাঠ

আধুনিক ক্যামেরা অ্যাপগুলোর বৈশিষ্ট্য হলো এর শক্তিশালী ও পরস্পর সম্পর্কযুক্ত ফিচারগুলো। ব্যবহারকারীরা চমৎকার HDR-সহ ভিডিও রেকর্ড করতে, ৬০ FPS-এ সাবলীল গতি ধারণ করতে এবং প্রিভিউ স্ট্যাবিলাইজেশনের মাধ্যমে অত্যন্ত মসৃণ ফুটেজ পেতে চান—প্রায়শই এই সবগুলোই একই সাথে।
ডেভেলপার হিসেবে আমরা জানি যে বাস্তবতা আরও জটিল। আপনি কীভাবে নিশ্চিত করবেন যে একটি নির্দিষ্ট ডিভাইস প্রদত্ত সংমিশ্রণকে সত্যিই সমর্থন করে? এখন পর্যন্ত, একাধিক ফিচার চালু করা প্রায়শই একটি জুয়া খেলার মতো ছিল। আপনি প্রতিটি ফিচারের সমর্থন আলাদাভাবে পরীক্ষা করতে পারতেন, কিন্তু সেগুলোকে একত্রিত করলে অনির্ধারিত আচরণ বা, আরও খারাপভাবে, ক্যামেরা সেশন ব্যর্থ হতে পারত। এই অনিশ্চয়তা ডেভেলপারদের রক্ষণশীল হতে বাধ্য করে, যা সক্ষম ডিভাইসের ব্যবহারকারীদের সর্বোত্তম সম্ভাব্য অভিজ্ঞতা লাভ থেকে বঞ্চিত করে।
উদাহরণস্বরূপ, খুব কম প্রিমিয়াম ডিভাইসই নির্ভরযোগ্যভাবে একই সাথে HDR এবং 60 FPS ভিডিও সমর্থন করে। ফলস্বরূপ, অধিকাংশ ফোনে ব্যবহারকারীর খারাপ অভিজ্ঞতা এড়ানোর জন্য বেশিরভাগ অ্যাপই একসাথে উভয়টি চালু করা থেকে বিরত থাকে।
এই সমস্যার সমাধানে, আমরা CameraX-এ ফিচার গ্রুপ চালু করছি – এটি একটি নতুন API যা এই অনুমান নির্ভরতা দূর করার জন্য ডিজাইন করা হয়েছে। এখন আপনি ক্যামেরা কনফিগার করার আগেই কোনো নির্দিষ্ট ফিচারের সমন্বয় সমর্থিত কিনা তা জেনে নিতে পারবেন, অথবা কেবল CameraX-কে আপনার অগ্রাধিকারগুলো জানিয়ে দিন এবং এটি আপনার জন্য সবচেয়ে ভালোভাবে সমর্থিত সমন্বয়টি চালু করে দেবে।
যারা CameraX ব্যবহারে নতুন তাদের জন্য
নতুন ফিচার গ্রুপ এপিআই (Feature Group API) নিয়ে বিস্তারিত আলোচনার আগে, চলুন সংক্ষেপে জেনে নেওয়া যাক ক্যামেরাএক্স (CameraX) কী। ক্যামেরাএক্স হলো একটি জেটপ্যাক (Jetpack) সাপোর্ট লাইব্রেরি, যা ক্যামেরা অ্যাপ ডেভেলপমেন্টকে আরও সহজ করার জন্য তৈরি করা হয়েছে। এটি একটি সামঞ্জস্যপূর্ণ এবং সহজে ব্যবহারযোগ্য এপিআই সারফেস (API surface) প্রদান করে যা বেশিরভাগ অ্যান্ড্রয়েড ডিভাইসে কাজ করে এবং অ্যান্ড্রয়েড ৬.০ (এপিআই লেভেল ২৩) পর্যন্ত ব্যাকওয়ার্ড-কম্প্যাটিবিলিটি (backward-compatibility) রয়েছে। আপনি যদি ক্যামেরাএক্স-এ নতুন হন, তবে আমরা আপনাকে শুরু করার জন্য অফিশিয়াল ডকুমেন্টেশন দেখে নিতে এবং কোডল্যাবটি চেষ্টা করে দেখতে পরামর্শ দিচ্ছি।
ফিচার গ্রুপ এপিআই দিয়ে আপনি যা তৈরি করতে পারেন
ফিচারের সমন্বয় নিয়ে আপনাকে আর ঝুঁকি নিতে হবে না এবং আপনি আত্মবিশ্বাসের সাথে সেরা ক্যামেরা অভিজ্ঞতা দিতে পারবেন – যেমন সক্ষম হার্ডওয়্যারে (উদাহরণস্বরূপ পিক্সেল ১০ প্রো) একই সাথে HDR এবং ৬০ FPS ভিডিও – এবং একই সাথে যেসব ডিভাইসে এই সমন্বয়টি সমর্থিত নয়, সেগুলোতেও ত্রুটি সুন্দরভাবে এড়াতে পারবেন।

পিক্সেল ১০ প্রো একই সাথে HDR এবং 60 FPS সক্ষম করছে

পুরোনো ডিভাইসে যেখানে HDR এবং 60 FPS একসাথে চলতে পারে না, সেখানে শুধু HDR চালু থাকে এবং 60 FPS অপশনটি বন্ধ থাকে।
ফিচার গ্রুপ এপিআই ব্যবহার করে আপনি যা করতে পারেন:
- আরও স্মার্ট ও ডাইনামিক UI তৈরি করুন: রিয়েল-টাইম হার্ডওয়্যার সাপোর্টের উপর ভিত্তি করে আপনার UI-তে সেটিংস বুদ্ধিমত্তার সাথে চালু বা বন্ধ করুন। উদাহরণস্বরূপ, যদি কোনো ব্যবহারকারী HDR চালু করেন, এবং সেই ডিভাইসে এই কম্বিনেশনটি সাপোর্টেড না হয়, তাহলে আপনি তাৎক্ষণিকভাবে 60 FPS অপশনটি নিষ্ক্রিয় করে দিতে পারেন।

- একটি নির্ভরযোগ্য "উচ্চ-মানের" মোড প্রদান করুন: কাঙ্ক্ষিত বৈশিষ্ট্যগুলির একটি অগ্রাধিকার তালিকা দিয়ে ক্যামেরাটি কনফিগার করুন। CameraX স্বয়ংক্রিয়ভাবে যেকোনো ডিভাইসের জন্য সেরা সমর্থিত সমন্বয়টি খুঁজে বের করে এবং সক্রিয় করে, যা জটিল, ডিভাইস-নির্দিষ্ট লজিক ছাড়াই একটি দুর্দান্ত ফলাফল নিশ্চিত করে।
- ক্যামেরা সেশন ব্যর্থতা প্রতিরোধ করুন: আগে থেকেই সাপোর্ট যাচাই করে নেওয়ার মাধ্যমে, আপনি ক্যামেরাকে কোনো অসমর্থিত কম্বিনেশন কনফিগার করার চেষ্টা থেকে বিরত রাখতে পারেন, যা ক্র্যাশের একটি সাধারণ উৎস দূর করে এবং ব্যবহারকারীকে একটি মসৃণ অভিজ্ঞতা প্রদান করে।
কার্যপ্রণালী: মূল উপাদানসমূহ
নতুন এপিআইটি SessionConfig এবং CameraInfo- তে করা গুরুত্বপূর্ণ সংযোজনগুলোকে কেন্দ্র করে তৈরি করা হয়েছে।
- GroupableFeature : এই API-টি কিছু পূর্বনির্ধারিত গ্রুপযোগ্য ফিচারের একটি সেট চালু করেছে, যেমন HDR_HLG10 , FPS_60 , PREVIEW_STABILIZATION , এবং IMAGE_ULTRA_HDR । গণনাগত সীমাবদ্ধতার কারণে, এই API-এর উচ্চ নির্ভরযোগ্যতার সাথে শুধুমাত্র একটি নির্দিষ্ট সেট ফিচারকেই গ্রুপ করা সম্ভব। আমরা এই তালিকাটি প্রসারিত করার জন্য সক্রিয়ভাবে কাজ করছি এবং ভবিষ্যতের রিলিজগুলিতে আরও ফিচারের জন্য সমর্থন যুক্ত করব।
- নতুন SessionConfig প্যারামিটার: ক্যামেরা সেশন শুরু করার জন্য ব্যবহৃত এই ক্লাসটি এখন দুটি নতুন প্যারামিটার গ্রহণ করে:
-
requiredFeatureGroup: কনফিগারেশন সফল হওয়ার জন্য যে ফিচারগুলো অবশ্যই সমর্থিত হতে হবে, সেগুলোর জন্য এটি ব্যবহার করুন - বিশেষ করে সেইসব ফিচারের জন্য যা একজন ব্যবহারকারী স্পষ্টভাবে চালু করেন, যেমন একটি 'HDR' সুইচ টগল করা। একটি সুনির্দিষ্ট এবং সামঞ্জস্যপূর্ণ অভিজ্ঞতা নিশ্চিত করতে, অনুরোধ করা সংমিশ্রণটি সমর্থিত না হলে, ফিচার অনুরোধটি নীরবে উপেক্ষা না করেbindToLifecycleকলটি একটিIllegalArgumentExceptionথ্রো করবে। এই ফলাফলটি আগে থেকে জেনে নেওয়ার জন্যCameraInfo#isFeatureGroupSupportedAPI (বিস্তারিত নিচে) ব্যবহার করা উচিত। -
preferredFeatureGroup: যেসব ফিচার কাঙ্ক্ষিত কিন্তু ঐচ্ছিক, সেগুলোর জন্য এটি ব্যবহার করুন, যেমন যখন আপনি একটি ডিফল্ট "উচ্চ-মানের" মোড চালু করতে চান। আপনি আপনার অগ্রাধিকার অনুসারে সাজানো আপনার কাঙ্ক্ষিত ফিচারগুলোর একটি তালিকা প্রদান করেন, এবং CameraX স্বয়ংক্রিয়ভাবে ডিভাইসটি দ্বারা সমর্থিত সর্বোচ্চ-অগ্রাধিকারের সমন্বয়টি সক্রিয় করে।
-
- CameraInfo#isFeatureGroupSupported() : কোনো ফিচার গ্রুপ সমর্থিত কিনা তা স্পষ্টভাবে যাচাই করার জন্য এটি হলো মূল কোয়েরি মেথড, যা আপনার অ্যাপের UI-তে ব্যবহারকারীদের শুধুমাত্র সমর্থিত ফিচার অপশনগুলো দেখানোর জন্য বিশেষভাবে উপযোগী। এতে আপনি একটি
SessionConfigপাস করেন এবং এটি কম্বিনেশনটি সমর্থিত কিনা তা নির্দেশ করে একটি বুলিয়ান রিটার্ন করে। আপনি যদি প্রয়োজনীয় ফিচারসহ একটিSessionConfigবাইন্ড করতে চান, তবে সেটি সমর্থিত কিনা তা নিশ্চিত করতে আপনার প্রথমে এই API-টি ব্যবহার করা উচিত।
বাস্তবে প্রয়োগ
চলুন দেখে নেওয়া যাক, কীভাবে এই উপাদানগুলো ব্যবহার করে আরও ভালো ক্যামেরা অভিজ্ঞতা তৈরি করা যায়।
দৃশ্যকল্প ১: "সর্বোত্তম প্রচেষ্টা" উচ্চ-মানের মোড
আপনি যদি ডিফল্টরূপে সেরা ফিচারগুলো চালু করতে চান, তাহলে preferredFeatureGroup এ একটি অগ্রাধিকার তালিকা দিতে পারেন। এই উদাহরণে, আমরা CameraX-কে প্রথমে HDR, তারপর 60 FPS এবং সবশেষে প্রিভিউ স্ট্যাবিলাইজেশনকে অগ্রাধিকার দিতে বলছি। CameraX সমস্ত সম্ভাব্য সমন্বয় পরীক্ষা করার এবং ডিভাইসটি সমর্থন করে এমন সেরাটি বেছে নেওয়ার জটিলতা সামলে নেয়।
উদাহরণস্বরূপ, যদি কোনো ডিভাইস HDR এবং 60 FPS একসাথে চালাতে পারে কিন্তু প্রিভিউ স্ট্যাবিলাইজেশন ছাড়া, তাহলে CameraX প্রথম দুটি চালু করবে এবং তৃতীয়টি বাদ দেবে। এইভাবে, জটিল ও ডিভাইস-নির্দিষ্ট চেক না লিখেই আপনি সম্ভাব্য সেরা অভিজ্ঞতা পাবেন।
cameraProvider.bindToLifecycle(
lifecycleOwner,
cameraSelector,
SessionConfig(
useCases = listOf(preview, videoCapture),
// The order of features in this list determines their priority.
// CameraX will enable the best-supported combination based on these
// priorities: HDR_HLG10 > FPS_60 > Preview Stabilization.
preferredFeatureGroup =
listOf(HDR_HLG10, FPS_60, PREVIEW_STABILIZATION),
).apply {
// (Optional) Get a callback with the enabled features
// to update your UI.
setFeatureSelectionListener { selectedFeatures ->
updateUiIndicators(selectedFeatures)
}
}
)
এই কোড স্নিপেটের জন্য, CameraX নিম্নলিখিত অগ্রাধিকার ক্রমে ফিচার কম্বিনেশনগুলি সক্রিয় করার চেষ্টা করবে এবং ডিভাইসটি প্রথমে যেটিকে সম্পূর্ণরূপে সমর্থন করে, সেটিকেই নির্বাচন করবে:
- HDR + 60 FPS + প্রিভিউ স্ট্যাবিলাইজেশন
- HDR + 60 FPS
- HDR + প্রিভিউ স্থিতিশীলতা
- HDR
- ৬০ এফপিএস + প্রিভিউ স্ট্যাবিলাইজেশন
- ৬০ এফপিএস
- পূর্বরূপ স্থিতিশীলতা
- উপরের কোনো বৈশিষ্ট্যই নয়
দৃশ্যকল্প ২: একটি রিঅ্যাক্টিভ UI তৈরি করা
এমন একটি UI তৈরি করতে যা ব্যবহারকারীর পছন্দের প্রতি সাড়া দেয় এবং ব্যবহারকারীকে কোনো অসমর্থিত ফিচার সংমিশ্রণ নির্বাচন করা থেকে বিরত রাখে, আপনি সরাসরি সাপোর্টের জন্য কোয়েরি করতে পারেন। নিচের ফাংশনটি পরীক্ষা করে দেখে যে কোন ফিচারগুলো ব্যবহারকারীর বর্তমান পছন্দের সাথে বেমানান, যার ফলে আপনি সংশ্লিষ্ট UI এলিমেন্টগুলো নিষ্ক্রিয় করতে পারবেন।
/**
* Returns a list of features that are NOT supported in combination
* with the currently selected features.
*/
fun getUnsupportedFeatures(
currentFeatures: Set<GroupableFeature>
): Set<GroupableFeature> {
val unsupportedFeatures = mutableSetOf<GroupableFeature>()
val appFeatureOptions = setOf(HDR_HLG10, FPS_60, PREVIEW_STABILIZATION)
// Iterate over every available feature option in your app.
appFeatureOptions.forEach { featureOption ->
// Skip features the user has already selected.
if (currentFeatures.contains(featureOption)) return@forEach
// Check if adding this new feature is supported.
val isSupported = cameraInfo.isFeatureGroupSupported(
SessionConfig(
useCases = useCases,
// Check the new feature on top of existing ones.
requiredFeatureGroup = currentFeatures + featureOption
)
)
if (!isSupported) {
unsupportedFeatures.add(featureOption)
}
}
return unsupportedFeatures
}
এরপর আপনি এই লজিকটি আপনার ViewModel বা UI কন্ট্রোলারে যুক্ত করতে পারেন, যা ব্যবহারকারীর ইনপুটের প্রতিক্রিয়া জানাবে এবং একটি নিশ্চিতভাবে কার্যকর কনফিগারেশন দিয়ে ক্যামেরাটিকে পুনরায় বাইন্ড করবে।
// Invoked when user turns some feature on/off.
fun onFeatureChange(currentFeatures: Set<GroupableFeature>) {
// Identify features that are unsupported with the current selection.
val unsupportedFeatures = getUnsupportedFeatures(currentFeatures)
// Update app UI so that users can't enable them.
updateDisabledFeatures(unsupportedFeatures)
// Since the UI now only allows selecting supported feature combinations,
// `currentFeatures` is always valid. This allows setting
// `requiredFeatureGroup` directly, without needing to re-check for
// support or set a feature selection listener.
cameraProvider.bindToLifecycle(
lifecycleOwner,
cameraSelector,
SessionConfig(
useCases = listOf(preview, videoCapture),
requiredFeatureGroup = currentFeatures,
)
)
}
এই ধারণাগুলো একটি কার্যকরী অ্যাপ্লিকেশনে দেখতে, আপনি আমাদের অভ্যন্তরীণ টেস্ট অ্যাপটি দেখতে পারেন। এটি উপরে আলোচিত 'বেস্ট এফোর্ট' এবং 'রিঅ্যাক্টিভ ইউআই' উভয় সিনারিওর একটি সম্পূর্ণ বাস্তবায়ন প্রদান করে।
অনুগ্রহ করে মনে রাখবেন: এটি একটি পরীক্ষামূলক অ্যাপ্লিকেশন এবং আনুষ্ঠানিকভাবে সমর্থিত কোনো নমুনা নয়। যদিও এটি ফিচার গ্রুপ এপিআই (Feature Group API)-এর জন্য একটি চমৎকার রেফারেন্স, তবে এটিকে প্রোডাকশন ব্যবহারের জন্য পরিমার্জিত করা হয়নি।
আজই শুরু করুন
ফিচার গ্রুপ এপিআই উন্নত ক্যামেরা সক্ষমতা নিয়ে কাজ করার ক্ষেত্রে অস্পষ্টতা দূর করে। ফিচার সাপোর্টের জন্য কোয়েরি করার একটি সুনির্দিষ্ট উপায় প্রদান করার মাধ্যমে, আপনি আত্মবিশ্বাসের সাথে আরও শক্তিশালী ও নির্ভরযোগ্য ক্যামেরা অ্যাপ তৈরি করতে পারেন।
এপিআইটি CameraX 1.5-এ পরীক্ষামূলকভাবে উপলব্ধ এবং 1.6 সংস্করণে এটি সম্পূর্ণ স্থিতিশীল হওয়ার কথা রয়েছে, সাথে আরও সমর্থন ও উন্নতিসমূহ আসছে।
আরও জানতে, অফিসিয়াল ডকুমেন্টেশন দেখুন। আপনি কী তৈরি করেন তা দেখার জন্য আমরা অধীর আগ্রহে অপেক্ষা করছি এবং আপনার মতামতের প্রত্যাশা করছি। অনুগ্রহ করে নিম্নলিখিত মাধ্যমগুলোর মাধ্যমে আপনার ভাবনা জানান এবং যেকোনো সমস্যা রিপোর্ট করুন:
পড়তে থাকুন

পণ্যের খবর
অ্যান্ড্রয়েড স্টুডিও পান্ডা ৪ এখন স্থিতিশীল এবং প্রোডাকশনে ব্যবহারের জন্য প্রস্তুত। এই রিলিজে যুক্ত হয়েছে প্ল্যানিং মোড, নেক্সট এডিট প্রেডিকশন এবং আরও অনেক কিছু, যা দিয়ে উচ্চ-মানের অ্যান্ড্রয়েড অ্যাপ তৈরি করা আগের চেয়েও সহজ।
Matt Dyor • পড়তে ৫ মিনিট

পণ্যের খবর
আপনি যদি একজন অ্যান্ড্রয়েড ডেভেলপার হন এবং আপনার অ্যাপে উদ্ভাবনী এআই ফিচার যুক্ত করতে চান, তবে আমরা সম্প্রতি শক্তিশালী নতুন আপডেট চালু করেছি।
Thomas Ezan • পড়তে ৩ মিনিট

পণ্যের খবর
অ্যান্ড্রয়েড ১৭ বিটা ৪-এ পৌঁছেছে, যা এই রিলিজ চক্রের সর্বশেষ নির্ধারিত বিটা এবং অ্যাপের সামঞ্জস্যতা ও প্ল্যাটফর্মের স্থিতিশীলতার জন্য একটি অত্যন্ত গুরুত্বপূর্ণ মাইলফলক।
Daniel Galpin • পড়তে ৪ মিনিট
আপ-টু-ডেট থাকুন
অ্যান্ড্রয়েড ডেভেলপমেন্টের সর্বশেষ তথ্য প্রতি সপ্তাহে আপনার ইনবক্সে পান।




