एक से ज़्यादा सुविधाओं का इस्तेमाल: CameraX 1.5 की मदद से, एक साथ कई सुविधाओं का इस्तेमाल करना
पढ़ने में 6 मिनट लगेंगे
आजकल के कैमरा ऐप्लिकेशन में, एक जैसी कई सुविधाएं होती हैं. उपयोगकर्ताओं को उम्मीद होती है कि वे शानदार एचडीआर में वीडियो रिकॉर्ड कर पाएं, 60 एफ़पीएस पर फ़्लूड मोशन कैप्चर कर पाएं, और प्रीव्यू स्टेबलाइज़ेशन की मदद से बेहतरीन फ़ुटेज पा पाएं. अक्सर, वे ये सभी काम एक साथ करना चाहते हैं.
डेवलपर के तौर पर, हम जानते हैं कि असलियत में यह प्रोसेस काफ़ी मुश्किल है. इस बात की पुष्टि कैसे की जा सकती है कि कोई डिवाइस, दिए गए कॉम्बिनेशन के साथ काम करता है? अब तक, एक साथ कई सुविधाओं को चालू करना अक्सर जोखिम भरा होता था. अलग-अलग सुविधाओं के लिए, यह देखा जा सकता है कि वे काम करती हैं या नहीं. हालांकि, उन्हें एक साथ इस्तेमाल करने पर, हो सकता है कि वे ठीक से काम न करें या कैमरा सेशन बंद हो जाए. इस वजह से, डेवलपर को अपने ऐप्लिकेशन को कम से कम सिस्टम कॉन्फ़िगरेशन के साथ काम करने के लिए डिज़ाइन करना पड़ता है. इससे, बेहतर सिस्टम कॉन्फ़िगरेशन वाले डिवाइसों पर ऐप्लिकेशन इस्तेमाल करने वाले लोगों को बेहतर अनुभव नहीं मिल पाता.
उदाहरण के लिए, बहुत कम प्रीमियम डिवाइसों में एचडीआर और 60 एफ़पीएस वीडियो एक साथ काम करते हैं. इसलिए, ज़्यादातर ऐप्लिकेशन एक साथ दोनों को चालू करने से बचते हैं, ताकि ज़्यादातर फ़ोन पर लोगों को खराब अनुभव न मिले.
इस समस्या को हल करने के लिए, हम CameraX में फ़ीचर ग्रुप लॉन्च कर रहे हैं. यह एक नया एपीआई है, जिसे इस समस्या को हल करने के लिए डिज़ाइन किया गया है. अब कैमरा कॉन्फ़िगर करने से पहले, यह क्वेरी की जा सकती है कि सुविधाओं का कोई खास कॉम्बिनेशन काम करता है या नहीं. इसके अलावा, CameraX को अपनी प्राथमिकताएं बताई जा सकती हैं. इससे CameraX, आपके लिए सुविधाओं का सबसे अच्छा कॉम्बिनेशन चालू कर देगा.
CameraX का इस्तेमाल शुरू करने वाले लोगों के लिए
नए Feature Group API के बारे में जानने से पहले, आइए एक बार फिर से जान लें कि CameraX क्या है. CameraX, Jetpack की एक सपोर्ट लाइब्रेरी है. इसे कैमरा ऐप्लिकेशन को आसानी से डेवलप करने में आपकी मदद करने के लिए बनाया गया है. यह एक ऐसा एपीआई उपलब्ध कराता है जिसका इस्तेमाल करना आसान है और जो ज़्यादातर Android डिवाइसों पर काम करता है. साथ ही, यह Android 6.0 (एपीआई लेवल 23) के साथ भी काम करता है. अगर आपने CameraX का इस्तेमाल पहले कभी नहीं किया है, तो हमारा सुझाव है कि आप आधिकारिक दस्तावेज़ पढ़ें और कोडलैब आज़माएं.
Feature Group API का इस्तेमाल करके क्या-क्या बनाया जा सकता है
अब आपको सुविधाओं के कॉम्बिनेशन के साथ एक्सपेरिमेंट करने की ज़रूरत नहीं है. साथ ही, आपको कैमरे से जुड़े बेहतरीन अनुभव देने में मदद मिलेगी. जैसे, एचडीआर और 60 एफ़पीएस वीडियो को एक साथ रिकॉर्ड करना. इसके लिए, आपको ऐसे हार्डवेयर की ज़रूरत होगी जो इन सुविधाओं के साथ काम करता हो. जैसे, Pixel 10 Pro. साथ ही, आपको उन डिवाइसों पर होने वाली गड़बड़ियों से बचने में मदद मिलेगी जो इन सुविधाओं के साथ काम नहीं करते.
Feature Group API की मदद से, ये काम किए जा सकते हैं:
- ज़्यादा स्मार्ट और डाइनैमिक यूज़र इंटरफ़ेस (यूआई) बनाएं: हार्डवेयर की रीयल-टाइम सहायता के आधार पर, अपने यूज़र इंटरफ़ेस (यूआई) में सेटिंग को स्मार्ट तरीके से चालू या बंद करें. उदाहरण के लिए, अगर कोई उपयोगकर्ता एचडीआर की सुविधा चालू करता है, तो आपके पास 60 एफ़पीएस के विकल्प को तुरंत धूसर करने और बंद करने का विकल्प होता है. ऐसा तब किया जा सकता है, जब उस डिवाइस पर एचडीआर और 60 एफ़पीएस की सुविधा एक साथ काम न करती हो.
- "हाई क्वालिटी" मोड में भरोसेमंद तरीके से वीडियो डिलीवर करें: कैमरे को, प्राथमिकता के आधार पर चुनी गई सुविधाओं की सूची के साथ कॉन्फ़िगर करें. CameraX, किसी भी डिवाइस के लिए सबसे सही कॉम्बिनेशन का पता लगाकर उसे अपने-आप चालू कर देता है. इससे, डिवाइस के हिसाब से लॉजिक को जटिल बनाए बिना, बेहतरीन नतीजे मिलते हैं.
- कैमरा सेशन फ़ेल होने से रोकना: पहले से ही यह पुष्टि करके कि डिवाइस में कैमरा काम करता है, कैमरे को ऐसे कॉन्फ़िगरेशन का इस्तेमाल करने से रोका जा सकता है जो काम नहीं करता. इससे क्रैश होने की समस्या को कम किया जा सकता है और उपयोगकर्ताओं को बेहतर अनुभव दिया जा सकता है.
यह कैसे काम करता है: मुख्य कॉम्पोनेंट
नया एपीआई, SessionConfig और CameraInfo में किए गए मुख्य बदलावों पर आधारित है.
- GroupableFeature: इस एपीआई में, ग्रुप की जा सकने वाली सुविधाओं का एक सेट शामिल है. जैसे, HDR_HLG10, FPS_60, PREVIEW_STABILIZATION, और IMAGE_ULTRA_HDR. कंप्यूटेशनल सीमाओं की वजह से, सिर्फ़ कुछ सुविधाओं को इस एपीआई की ज़्यादा भरोसेमंद सुविधाओं के साथ ग्रुप किया जा सकता है. हम इस सूची को बड़ा करने के लिए लगातार काम कर रहे हैं. साथ ही, आने वाले समय में होने वाली रिलीज़ में, ज़्यादा सुविधाओं के लिए सहायता उपलब्ध कराएंगे.
- नए SessionConfig पैरामीटर: कैमरा सेशन शुरू करने के लिए इस्तेमाल की जाने वाली इस क्लास में, अब दो नए पैरामीटर इस्तेमाल किए जा सकते हैं:
requiredFeatureGroup: इसका इस्तेमाल उन सुविधाओं के लिए करें जिनके लिए कॉन्फ़िगरेशन को पूरा करने के लिए, सहायता उपलब्ध कराना ज़रूरी है. यह उन सुविधाओं के लिए सबसे सही है जिन्हें उपयोगकर्ता साफ़ तौर पर चालू करता है. जैसे, 'एचडीआर' स्विच को टॉगल करना. यह पक्का करने के लिए कि आपको एक जैसा अनुभव मिले, अगर अनुरोध किया गया कॉम्बिनेशन काम नहीं करता है, तोbindToLifecycleकॉल,IllegalArgumentExceptionदिखाएगा. ऐसा इसलिए किया जाएगा, ताकि सुविधा के अनुरोध को अनदेखा न किया जाए. इस नतीजे के बारे में पहले से क्वेरी करने के लिए,CameraInfo#isFeatureGroupSupportedएपीआई (नीचे दी गई जानकारी) का इस्तेमाल किया जाना चाहिए.preferredFeatureGroup: इसका इस्तेमाल उन सुविधाओं के लिए करें जो ज़रूरी नहीं हैं, लेकिन काम की हैं. उदाहरण के लिए, जब आपको डिफ़ॉल्ट रूप से "हाई-क्वालिटी" मोड लागू करना हो. आपको अपनी पसंद की सुविधाओं की एक सूची देनी होती है. इस सूची में, सुविधाओं को अपनी प्राथमिकताओं के हिसाब से क्रम में लगाएं. इसके बाद, CameraX अपने-आप सबसे ज़्यादा प्राथमिकता वाली सुविधा चालू कर देता है. हालांकि, यह सुविधा डिवाइस के साथ काम करनी चाहिए.
- CameraInfo#isFeatureGroupSupported(): यह मुख्य क्वेरी वाला तरीका है. इससे साफ़ तौर पर यह पता चलता है कि कोई सुविधा ग्रुप काम करता है या नहीं. यह तरीका, आपके ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) में सिर्फ़ उन सुविधाओं के विकल्प उपलब्ध कराने के लिए सबसे सही है जो काम करती हैं. इसमें
SessionConfigपास किया जाता है. इसके बाद, यह बूलियन वैल्यू दिखाता है. इससे पता चलता है कि कॉम्बिनेशन काम करता है या नहीं. अगर आपको किसीSessionConfigको ज़रूरी सुविधाओं के साथ बाइंड करना है, तो आपको पहले इस एपीआई का इस्तेमाल करना चाहिए. इससे यह पक्का किया जा सकेगा कि के साथ ये सुविधाएं काम करती हैं.
लागू करने का तरीका
आइए, बेहतर कैमरा अनुभव देने के लिए इन कॉम्पोनेंट का इस्तेमाल करने का तरीका जानें.
पहला उदाहरण: "बेस्ट एफर्ट" हाई-क्वालिटी मोड
अगर आपको डिफ़ॉल्ट रूप से सबसे अच्छी सुविधाएं चालू करनी हैं, तो preferredFeatureGroup को प्राथमिकता के हिसाब से सूची दी जा सकती है. इस उदाहरण में, CameraX को HDR को प्राथमिकता देने के लिए कहा गया है. इसके बाद, 60 FPS और आखिर में, झलक को स्थिर करने की सुविधा को प्राथमिकता देने के लिए कहा गया है. CameraX, सभी संभावित कॉम्बिनेशन की जांच करने और डिवाइस के साथ काम करने वाले सबसे अच्छे कॉम्बिनेशन को चुनने की मुश्किल प्रोसेस को मैनेज करता है.
उदाहरण के लिए, अगर कोई डिवाइस एचडीआर और 60 एफ़पीएस को एक साथ हैंडल कर सकता है, लेकिन प्रीव्यू स्टेबलाइज़ेशन के साथ नहीं, तो 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 + प्रीव्यू स्टेबिलाइज़ेशन
- एचडीआर + 60 फ़्रेम प्रति सेकंड
- एचडीआर + प्रीव्यू स्टेबलाइज़ेशन
- एचडीआर
- 60 FPS + प्रीव्यू स्टेबलाइज़ेशन
- 60 FPS (फ़्रेम प्रति सेकंड)
- स्टेबलाइज़ेशन की झलक देखें
- ऊपर दी गई कोई भी सुविधा
दूसरी स्थिति: रीऐक्टिव यूज़र इंटरफ़ेस (यूआई) बनाना
ऐसा यूज़र इंटरफ़ेस (यूआई) बनाने के लिए जो उपयोगकर्ता के चुने गए विकल्पों के हिसाब से काम करता हो और उपयोगकर्ताओं को ऐसी सुविधाओं के कॉम्बिनेशन को चुनने से रोकता हो जो काम नहीं करते हैं, सीधे तौर पर सहायता के लिए क्वेरी की जा सकती है. नीचे दिया गया फ़ंक्शन यह जांच करता है कि उपयोगकर्ता के मौजूदा विकल्पों के साथ कौनसी सुविधाएं काम नहीं करती हैं. इससे आपको यूज़र इंटरफ़ेस (यूआई) के एलिमेंट बंद करने में मदद मिलती है.
/**
* 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 या यूज़र इंटरफ़ेस (यूआई) कंट्रोलर में शामिल किया जा सकता है. इससे उपयोगकर्ता के इनपुट पर प्रतिक्रिया दी जा सकेगी और कैमरे को ऐसे कॉन्फ़िगरेशन के साथ फिर से बाइंड किया जा सकेगा जो काम करता है.
// 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 के लिए एक बेहतरीन रेफ़रंस है. हालांकि, इसे प्रोडक्शन के लिए इस्तेमाल करने के हिसाब से बेहतर नहीं बनाया गया है.
आज ही शुरू करें
Feature Group API की मदद से, कैमरे की ऐडवांस सुविधाओं का इस्तेमाल आसानी से किया जा सकता है. सुविधा के साथ काम करने वाले डिवाइसों के बारे में क्वेरी करने का एक तय तरीका उपलब्ध कराने से, ज़्यादा भरोसेमंद और बेहतर कैमरा ऐप्लिकेशन बनाए जा सकते हैं.
यह एपीआई, CameraX 1.5 में एक्सपेरिमेंटल तौर पर उपलब्ध है. इसे 1.6 वर्शन में पूरी तरह से स्टेबल कर दिया जाएगा. साथ ही, इसमें और भी सुधार किए जाएंगे और इसे ज़्यादा डिवाइसों पर इस्तेमाल किया जा सकेगा.
ज़्यादा जानने के लिए, आधिकारिक दस्तावेज़ देखें. हमें आपका कॉन्टेंट देखने का बेसब्री से इंतज़ार रहेगा. साथ ही, हमें आपके सुझाव/राय का इंतज़ार रहेगा. अगर आपकी कोई शिकायत है, तो भी हमें ज़रूर बताएं! अगर आपके पास कोई सुझाव या राय है या आपको किसी समस्या की शिकायत करनी है, तो कृपया हमें बताएं. इसके लिए, यहां दिए गए तरीकों का इस्तेमाल करें:
-
प्रॉडक्ट से जुड़ी खबरेंआज हमें यह बताते हुए खुशी हो रही है कि AndroidX Security State के वर्शन 1.1.0 और Security State Provider के वर्शन 1.0.0 की लाइब्रेरी को स्टेबल वर्शन के तौर पर रिलीज़ कर दिया गया है.
Maunik Shah, Alec Garcia, Joseph Yong • पढ़ने में 4 मिनट लगेंगे -
प्रॉडक्ट से जुड़ी खबरेंआज हम लंबी अवधि के टास्क (एलएचटी) का पहला सेट रिलीज़ कर रहे हैं. ये ऐसे मुश्किल टास्क हैं जिन्हें पूरा करने में इंजीनियर को कई दिन या यहां तक कि एक हफ़्ता भी लग सकता है. हम एजेंटिक इवैल्यूएशन की सुविधा भी लॉन्च कर रहे हैं. इसकी शुरुआत, मॉडल उपलब्ध कराने वाली कंपनियों के एजेंट से की जाएगी.
Matthew McCullough • तीन मिनट में पढ़ा जा सकता है -
प्रॉडक्ट से जुड़ी खबरेंAndroid पर वायरलेस डीबगिंग की सुविधा अब पहले से ज़्यादा तेज़, भरोसेमंद, और आसानी से सेट अप की जा सकती है. ADB Wi-Fi 2.0 में, हमने नया सर्वर स्टैक और बेहतर नेटवर्क हैंडलिंग की सुविधा जोड़ी है. इससे, इस्तेमाल से जुड़ी समस्याओं के बारे में डेवलपर से मिले सुझावों को सीधे तौर पर हल किया जा सकेगा.
Steven Jenkins, Sherif Eid, Fabien Sanglard • पढ़ने में 1 मिनट लगेगा
Android डेवलपमेंट से जुड़ी नई अहम जानकारी, हर हफ़्ते अपने इनबॉक्स में पाएं.