एक से ज़्यादा सुविधाओं को एक साथ इस्तेमाल करने की सुविधा: CameraX 1.5 की मदद से, सुविधाओं को एक साथ इस्तेमाल करने की गारंटी
पढ़ने में 6 मिनट लगेंगे
आजकल के कैमरा ऐप्लिकेशन में, एक से ज़्यादा सुविधाएं होती हैं और ये सुविधाएं एक-दूसरे के साथ काम करती हैं. उपयोगकर्ताओं को उम्मीद होती है कि वे शानदार एचडीआर क्वालिटी में वीडियो रिकॉर्ड कर पाएंगे, 60 FPS पर फ़्लूइड मोशन कैप्चर कर पाएंगे, और प्रीव्यू स्टैबलाइज़ेशन की मदद से, बिना किसी रुकावट के वीडियो रिकॉर्ड कर पाएंगे. अक्सर, वे ये सभी काम एक साथ करना चाहते हैं.
डेवलपर के तौर पर, हम जानते हैं कि असलियत में यह काम इतना आसान नहीं है. आपके पास यह पक्का करने का कोई तरीका नहीं है कि कोई खास डिवाइस, सुविधाओं के किसी खास कॉम्बिनेशन के साथ काम करेगा या नहीं. अब तक, एक से ज़्यादा सुविधाओं को चालू करना, अक्सर एक जुआ होता था. आपके पास हर सुविधा के लिए, यह देखने का विकल्प होता था कि वह काम करती है या नहीं. हालांकि, इन सुविधाओं को एक साथ इस्तेमाल करने पर, हो सकता है कि वे ठीक से काम न करें या इससे भी बुरा, कैमरा सेशन फ़ेल हो जाए. इस अनिश्चितता की वजह से, डेवलपर को ज़्यादा सतर्क रहना पड़ता है. इस वजह से, बेहतर डिवाइस इस्तेमाल करने वाले लोग, कैमरे की सुविधाओं का बेहतर अनुभव नहीं ले पाते.
उदाहरण के लिए, बहुत कम प्रीमियम डिवाइसों पर, एचडीआर और 60 FPS पर वीडियो रिकॉर्ड करने की सुविधा एक साथ काम करती है. इसलिए, ज़्यादातर ऐप्लिकेशन इन दोनों सुविधाओं को एक साथ चालू करने से बचते हैं, ताकि ज़्यादातर फ़ोन पर उपयोगकर्ताओं को खराब अनुभव न मिले.
इस समस्या को हल करने के लिए, हम CameraX में सुविधा ग्रुप लॉन्च कर रहे हैं. यह एक नया एपीआई है, जिसे इस समस्या को हल करने के लिए डिज़ाइन किया गया है. अब आपके पास यह क्वेरी करने का विकल्प है कि सुविधाओं का कोई खास कॉम्बिनेशन काम करता है या नहीं. यह क्वेरी, कैमरा कॉन्फ़िगर करने से पहले की जा सकती है. इसके अलावा, CameraX को अपनी प्राथमिकताएं बताई जा सकती हैं. इसके बाद, CameraX आपके लिए, सुविधाओं का सबसे अच्छा कॉम्बिनेशन चालू कर देगा.
CameraX का इस्तेमाल पहली बार करने वाले लोगों के लिए
नए सुविधा ग्रुप एपीआई के बारे में जानने से पहले, आइए CameraX के बारे में जानते हैं. CameraX, Jetpack की सपोर्ट लाइब्रेरी है. इसे कैमरा ऐप्लिकेशन को आसानी से डेवलप करने में आपकी मदद करने के लिए बनाया गया है. यह एक जैसा और इस्तेमाल में आसान एपीआई उपलब्ध कराता है. यह एपीआई, Android 6.0 (एपीआई लेवल 23) और इसके बाद के वर्शन वाले ज़्यादातर Android डिवाइसों पर काम करता है. अगर आपने CameraX का इस्तेमाल पहली बार किया है, तो हमारा सुझाव है कि आप आधिकारिक दस्तावेज़ देखें और कोडलैब आज़माएं, ताकि इसे इस्तेमाल करना शुरू किया जा सके.
सुविधा ग्रुप एपीआई का इस्तेमाल करके क्या-क्या बनाया जा सकता है
अब आपको सुविधाओं के कॉम्बिनेशन के बारे में अनुमान लगाने की ज़रूरत नहीं है. साथ ही, आपके पास कैमरे की सुविधाओं का बेहतर अनुभव देने का विकल्प है. जैसे, Pixel 10 Pro जैसे बेहतर हार्डवेयर पर, एचडीआर और 60 FPS पर वीडियो रिकॉर्ड करने की सुविधा एक साथ उपलब्ध कराई जा सकती है. इसके अलावा, उन डिवाइसों पर गड़बड़ियां होने से बचा जा सकता है जिन पर सुविधाओं का कॉम्बिनेशन काम नहीं करता.
सुविधा ग्रुप एपीआई का इस्तेमाल करके, ये काम किए जा सकते हैं:
- बेहतर और डाइनैमिक यूज़र इंटरफ़ेस (यूआई) बनाएं: रीयल-टाइम में हार्डवेयर की मदद से, अपने यूज़र इंटरफ़ेस (यूआई) में सेटिंग को चालू या बंद करें. उदाहरण के लिए, अगर कोई उपयोगकर्ता एचडीआर की सुविधा चालू करता है और उस डिवाइस पर, एचडीआर और 60 FPS पर वीडियो रिकॉर्ड करने की सुविधा एक साथ काम नहीं करती, तो 60 FPS पर वीडियो रिकॉर्ड करने के विकल्प को तुरंत धुंधला करें और उसे बंद करें.
- "अच्छी क्वालिटी" वाला मोड उपलब्ध कराएं: कैमरे को, अपनी पसंद की सुविधाओं की प्राथमिकता वाली सूची के साथ कॉन्फ़िगर करें. 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को बाइंड करना है, तो आपको यह पक्का करने के लिए पहले इस एपीआई का इस्तेमाल करना चाहिए कि यह काम करता है या नहीं.
असल में लागू करने का तरीका
आइए, इन कॉम्पोनेंट का इस्तेमाल करके, कैमरे का बेहतर अनुभव देने का तरीका जानते हैं.
Scenario 1: "बेहतर क्वालिटी" वाला मोड
अगर आपको डिफ़ॉल्ट रूप से, सबसे अच्छी सुविधाएं चालू करनी हैं, तो preferredFeatureGroup को प्राथमिकता वाली सूची दी जा सकती है. इस उदाहरण में, हम CameraX को प्राथमिकता के हिसाब से, एचडीआर, फिर 60 FPS, और आखिर में प्रीव्यू स्टैबलाइज़ेशन को चालू करने के लिए कहते हैं. CameraX, सभी संभावित कॉम्बिनेशन की जांच करने और डिवाइस के साथ काम करने वाले सबसे अच्छे कॉम्बिनेशन को चुनने की जटिलता को हैंडल करता है.
उदाहरण के लिए, अगर कोई डिवाइस, एचडीआर और 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, सुविधाओं के कॉम्बिनेशन को प्राथमिकता के इस क्रम में चालू करने की कोशिश करेगा. साथ ही, वह पहले कॉम्बिनेशन को चुनेगा जो डिवाइस के साथ पूरी तरह से काम करता है:
- एचडीआर + 60 FPS + प्रीव्यू स्टैबलाइज़ेशन
- एचडीआर + 60 FPS
- एचडीआर + प्रीव्यू स्टैबलाइज़ेशन
- एचडीआर
- 60 FPS + प्रीव्यू स्टैबलाइज़ेशन
- 60 FPS
- प्रीव्यू स्टैबलाइज़ेशन
- ऊपर दी गई कोई भी सुविधा नहीं
Scenario 2: रिऐक्टिव यूज़र इंटरफ़ेस (यूआई) बनाना
ऐसा यूज़र इंटरफ़ेस (यूआई) बनाने के लिए जो उपयोगकर्ता के चुने गए विकल्पों के हिसाब से काम करे और उपयोगकर्ताओं को सुविधाओं का ऐसा कॉम्बिनेशन चुनने से रोके जो काम नहीं करता, सीधे तौर पर यह क्वेरी की जा सकती है कि सुविधाएं काम करती हैं या नहीं. नीचे दिया गया फ़ंक्शन, यह जांचता है कि उपयोगकर्ता के मौजूदा चुने गए विकल्पों के साथ कौनसी सुविधाएं काम नहीं करती हैं. इससे, आपके पास यूज़र इंटरफ़ेस (यूआई) के संबंधित एलिमेंट को बंद करने का विकल्प होता है.
/**
* 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,
)
)
}इन कॉन्सेप्ट को काम करने वाले ऐप्लिकेशन में देखने के लिए, हमारे इंटरनल टेस्ट ऐप्लिकेशन को एक्सप्लोर किया जा सकता है. इसमें, ऊपर बताए गए "बेहतर क्वालिटी" और "रिऐक्टिव यूज़र इंटरफ़ेस (यूआई)" दोनों तरह के सिनेरियो को पूरी तरह से लागू किया गया है.
कृपया ध्यान दें: यह एक टेस्ट ऐप्लिकेशन है. यह आधिकारिक तौर पर सहायता पाने वाला सैंपल नहीं है. यह सुविधा ग्रुप एपीआई के लिए एक अच्छा रेफ़रंस है. हालांकि, इसे प्रोडक्शन में इस्तेमाल करने के लिए बेहतर नहीं बनाया गया है.
आज ही शुरू करें
सुविधा ग्रुप एपीआई की मदद से, कैमरे की ऐडवांस सुविधाओं के साथ काम करने से जुड़ी अनिश्चितता को खत्म किया जा सकता है. सुविधाओं के काम करने के बारे में क्वेरी करने का एक तय तरीका उपलब्ध कराकर, आपके पास भरोसे के साथ, ज़्यादा बेहतर और भरोसेमंद कैमरा ऐप्लिकेशन बनाने का विकल्प होता है.
यह एपीआई, CameraX 1.5 में एक्सपेरिमेंटल तौर पर उपलब्ध है. इसे 1.6 वर्शन में पूरी तरह से स्टेबल किया जाएगा. साथ ही, इसमें ज़्यादा सहायता और सुधार किए जाएंगे.
ज़्यादा जानने के लिए, आधिकारिक दस्तावेज़ देखें. हमें आपका कॉन्टेंट देखने का बेसब्री से इंतज़ार रहेगा. साथ ही, हमें आपकी राय का भी इंतज़ार रहेगा. कृपया इन तरीकों का इस्तेमाल करके, अपनी राय शेयर करें और किसी समस्या की शिकायत करें:
-
प्रॉडक्ट से जुड़ी खबरेंGoogle Play की सबसे बड़ी प्राथमिकता, उपयोगकर्ताओं को सुरक्षित ऑनलाइन अनुभव देना और उन्हें नुकसान से बचाना है.
Paul Feng • पढ़ने में 2 मिनट लगेंगे -
प्रॉडक्ट से जुड़ी खबरेंआज हम Jetpack Compose 1.0 के रिलीज़ होने के पांच साल पूरे होने का जश्न मना रहे हैं. 28 जुलाई, 2021 को लॉन्च किए गए वर्शन 1.0 से लेकर, हमारे सबसे नए वर्शन 1.11 तक, हमने एपीआई में कई बदलाव देखे हैं. इसलिए, हम इस मौके का जश्न मना रहे हैं.
Rebecca Franks, Nick Butcher, Loryn Hairston • पढ़ने में 5 मिनट लगेंगे -
प्रॉडक्ट से जुड़ी खबरेंAndroid Studio Quail 2 का स्टेबल वर्शन अब उपलब्ध है. इसका इस्तेमाल प्रोडक्शन में किया जा सकता है. इसमें, एजेंटिक वर्कफ़्लो, मेमोरी लीक की नेटिव तौर पर इंटिग्रेट की गई प्रोफ़ाइलिंग, और कॉन्टेक्स्ट-अवेयर क्रैश रेमेडिएशन की सुविधा है. इससे, आपके आईडीई में बदलाव होगा.
-
अमान असफ़ॉ • पढ़ने में 3 मिनट लगेंगे
Amman Asfaw
•
- #Android Studio में Gemini
- # Quail 2
- #Android Studio
Android डेवलपमेंट से जुड़ी नई जानकारी हर हफ़्ते अपने इनबॉक्स में पाएं.