सिर्फ़ एक सुविधा नहीं: CameraX 1.5 की मदद से, कई सुविधाओं को एक साथ इस्तेमाल करने की गारंटी
पढ़ने में 6 मिनट लगेंगे
आजकल के कैमरा ऐप्लिकेशन में, कई सुविधाएं होती हैं और ये एक-दूसरे के साथ काम करती हैं. उपयोगकर्ताओं को उम्मीद होती है कि वे शानदार एचडीआर क्वालिटी में वीडियो रिकॉर्ड कर पाएंगे, 60 FPS पर फ़्लूइड मोशन कैप्चर कर पाएंगे, और प्रीव्यू स्टैबलाइज़ेशन की मदद से, बिना किसी रुकावट के वीडियो रिकॉर्ड कर पाएंगे. अक्सर, वे ये सभी काम एक साथ करना चाहते हैं.
डेवलपर के तौर पर, हमें पता है कि असल में यह इतना आसान नहीं है. आपके पास यह गारंटी देने का कोई तरीका नहीं है कि कोई खास डिवाइस, सुविधाओं के किसी खास कॉम्बिनेशन के साथ काम करेगा. अब तक, कई सुविधाओं को एक साथ चालू करना, एक तरह का जुआ था. आपके पास हर सुविधा के लिए, यह देखने का विकल्प था कि वह काम करती है या नहीं. हालांकि, उन्हें एक साथ इस्तेमाल करने पर, अनचाही गड़बड़ियां हो सकती थीं. इससे भी बुरा यह हो सकता था कि कैमरा सेशन ही फ़ेल हो जाए. इस वजह से, डेवलपर को बहुत सोच-समझकर काम करना पड़ता है. इससे, बेहतर सुविधाओं वाले डिवाइसों के उपयोगकर्ता, उन सुविधाओं का इस्तेमाल नहीं कर पाते.
उदाहरण के लिए, बहुत कम प्रीमियम डिवाइसों पर, एचडीआर और 60 FPS वीडियो की सुविधा एक साथ काम करती है. इसलिए, ज़्यादातर ऐप्लिकेशन, दोनों सुविधाओं को एक साथ चालू करने से बचते हैं, ताकि ज़्यादातर फ़ोन पर उपयोगकर्ताओं को खराब अनुभव न मिले.
इस समस्या को हल करने के लिए, हम 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 • पढ़ने में 3 मिनट लगेंगे -
प्रॉडक्ट से जुड़ी खबरेंपिछले साल, हमने Android डेवलपर की पहचान की पुष्टि करने की सुविधा शुरू की थी. इससे, इकोसिस्टम की सुरक्षा को मज़बूत किया जा सकता है और नुकसान पहुंचाने वाले ऐप्लिकेशन रिलीज़ करने के लिए, बुरे मकसद से काम करने वाले लोगों या ग्रुप को अपनी पहचान छिपाने से रोका जा सकता है.
Matthew Forsythe • पढ़ने में 2 मिनट लगेंगे -
प्रॉडक्ट से जुड़ी खबरेंऑगमेंटेड ओवरले से लेकर पूरी तरह से इमर्सिव एनवायरमेंट तक, Android XR का इकोसिस्टम तेज़ी से बढ़ रहा है. Samsung Galaxy XR आज से ही उपलब्ध है.
Stevan Silva, Vinny DaSilva • पढ़ने में 3 मिनट लगेंगे
Android डेवलपमेंट से जुड़ी नई जानकारी हर हफ़्ते अपने इनबॉक्स में पाएं.