CameraX जटिल Camera2 के ऊपर एक सरल और सुसंगत API प्रदान करने वाली Android Jetpack लाइब्रेरी है। यह सैकड़ों Android डिवाइस मॉडलों के बीच अंतरों को एब्स्ट्रैक्ट करती है और विभिन्न हार्डवेयर पर कैमरे का एकसमान व्यवहार सुनिश्चित करती है। Android Developer CameraX Guide (2026) के अनुसार, यह लाइब्रेरी 25,000+ Google Play ऐप्स में उपयोग होती है और API Level 21 और उससे ऊपर के डिवाइसों पर काम करती है।
मुख्य बातें
CameraX Android Jetpack सूट की एक लाइब्रेरी है, जिसे Google ने 2019 में पहली बार पुराने Camera API के प्रतिस्थापन और जटिल Camera2 के सरलीकृत विकल्प के रूप में जारी किया था। CameraX का मूल दर्शन है “एक बार लिखो, सभी डिवाइसों पर चलाओ”। लाइब्रेरी स्वचालित रूप से हार्डवेयर अंतरों को संभालती है: कैमरों की स्थिति, समर्थित रिज़ॉल्यूशन, सेंसर ओरिएंटेशन और उपलब्ध प्रारूप — डेवलपर को डिवाइस-विशिष्ट कोड लिखने की आवश्यकता नहीं है।
CameraX आर्किटेक्चर use cases पर बनाया गया है: Preview (Viewfinder में कैमरा फ़ीड दिखाना), ImageCapture (फ़ोटो लेना), ImageAnalysis (ML के लिए फ्रेम स्ट्रीम का विश्लेषण) और VideoCapture (वीडियो रिकॉर्ड करना)। प्रत्येक use case एक स्वतंत्र घटक है जिसे जोड़ा जा सकता है: व्यूफ़ाइंडर के लिए Preview और ML प्रोसेसिंग के लिए ImageAnalysis एक साथ चलाना। Google (2026) के अनुसार, CameraX 99% Android डिवाइसों पर API 21+ के साथ समर्थित है।
CameraX फ्रंट और रियर कैमरों के बीच स्वचालित स्विचिंग, सेशन को पुनः बनाए बिना स्क्रीन रोटेशन के लिए समर्थन, LifecycleOwner के माध्यम से अंतर्निहित जीवनचक्र प्रबंधन, एक Lifecycle प्रक्रिया में use cases को बाइंड करना, पोर्ट्रेट, HDR और नाइट मोड के लिए Camera2 Extensions का समर्थन, और वास्तविक डिवाइस के बिना यूनिट परीक्षण के लिए TestableCameraX प्रदान करता है।
CameraX चार मानक use cases को परिभाषित करता है, प्रत्येक एक विशिष्ट कैमरा कार्य को हल करता है। Use cases को जोड़ा जा सकता है: सबसे लोकप्रिय संयोजन कैमरा ऐप के लिए Preview + ImageCapture और ML स्कैनर के लिए Preview + ImageAnalysis हैं।
| Use Case | उद्देश्य | क्लास |
|---|---|---|
| Preview | रीयल-टाइम में कैमरा फ़ीड दिखाना | PreviewView |
| ImageCapture | फ़्लैश और रिज़ॉल्यूशन सेटिंग्स के साथ फ़ोटो लेना | ImageCapture |
| ImageAnalysis | ML प्रोसेसिंग के लिए प्रत्येक फ्रेम का विश्लेषण | ImageAnalysis |
| VideoCapture | माइक्रोफ़ोन के साथ वीडियो रिकॉर्ड करना (1.1.0-beta से) | VideoCapture |
Preview use case CameraX लाइब्रेरी के एक विशेष View — PreviewView में कैमरा वीडियो स्ट्रीम प्रदर्शित करता है। PreviewView स्वचालित रूप से कैमरे के पहलू अनुपात में समायोजित हो जाता है, ScaleType (FillCenter, FitCenter) और use case को पुनः बनाए बिना स्क्रीन रोटेशन का समर्थन करता है। डेवलपर को केवल ProcessCameraProvider के माध्यम से Preview को Lifecycle से बाइंड करने की आवश्यकता है।
ImageAnalysis use case विश्लेषण के लिए प्रत्येक कैमरा फ्रेम को एक हैंडलर को भेजता है: टेक्स्ट पहचान, चेहरा पहचान, QR कोड स्कैनिंग। एनालाइज़र फ्रेम्स को YUV_420_888 प्रारूप में प्राप्त करता है — सार्वभौमिक Android रंग स्थान। ऑपरेटिंग मोड (BLOCKING या NON_BLOCKING) फ्रेम क्यू को नियंत्रित करता है: BLOCKING पिछले विश्लेषण के पूरा होने की प्रतीक्षा करता है, NON_BLOCKING देरी के दौरान फ्रेम्स को छोड़ देता है।
ImageCapture use case फ़्लैश, रिज़ॉल्यूशन और संपीड़न सेटिंग्स के साथ कैमरे से फ़ोटो लेता है। JPEG और RAW प्रारूप समर्थित हैं (संगत डिवाइसों पर)। ImageCapture OnImageCapturedCallback के माध्यम से एसिंक्रोनस रूप से या ImageCapture.OutputFileOptions के माध्यम से सीधे फ़ाइल में स्नैपशॉट सहेजता है।
VideoCapture use case CameraX 1.1.0 (beta) में जोड़ा गया था और 30 FPS पर 4K तक वीडियो रिकॉर्ड करने की अनुमति देता है। Use case स्वचालित रूप से Preview के साथ सिंक्रोनाइज़ होता है: व्यूफ़ाइंडर में छवि वैसी ही होती है जैसी फ़ाइल में रिकॉर्ड की जा रही है। VideoCapture आंतरिक रूप से MediaCodec और MediaMuxer का उपयोग करता है, वीडियो कोडेक और MP4 कंटेनर के कॉन्फ़िगरेशन की जटिलता को छिपाते हुए।
CameraX और Camera2 Android में कैमरे के साथ काम करने के दो तरीके हैं। Camera2 एक निम्न-स्तरीय API है जो डिवाइस पर पूर्ण नियंत्रण देता है। CameraX एक उच्च-स्तरीय एब्स्ट्रैक्शन है जो विशिष्ट परिदृश्यों को स्वचालित करता है। उनके बीच चुनाव परियोजना की आवश्यकताओं पर निर्भर करता है।
| विशेषता | CameraX | Camera2 |
|---|---|---|
| API स्तर | उच्च (use case) | निम्न (पूर्ण नियंत्रण) |
| डिवाइस-विशिष्ट कोड | आवश्यक नहीं | प्रत्येक डिवाइस के लिए आवश्यक |
| Lifecycle बाइंडिंग | स्वचालित | मैन्युअल |
| एक्सटेंशन | अंतर्निहित (HDR, Portrait, Night) | OEM कार्यान्वयन की आवश्यकता |
| कार्यान्वयन जटिलता | 15–30 लाइन कोड | 100–300 लाइन कोड |
| API समर्थन | API 21+ | API 21+ |
| लचीलापन | मानक परिदृश्य | कोई भी परिदृश्य |
मानक कार्यों के लिए CameraX का उपयोग करें: इन-ऐप कैमरा, QR स्कैनर, ML स्ट्रीम प्रोसेसिंग। Camera2 का उपयोग करें जब मैन्युअल एक्सपोज़र नियंत्रण, पूर्ण पैरामीटर नियंत्रण के साथ RAW शूटिंग, या एक साथ कई कैमरों के साथ काम करने की आवश्यकता हो।
आइए तीन मुख्य use cases: Preview, ImageCapture और ImageAnalysis का उपयोग करते हुए एक Android एप्लिकेशन में CameraX की पूर्ण सेटअप की समीक्षा करें।
कोड ProcessCameraProvider के माध्यम से CameraX को Activity Lifecycle से बाइंड करता है। पहले प्रदाता का एक इंस्टेंस अनुरोध किया जाता है, फिर use cases बनाए जाते हैं और बाइंडिंग की जाती है।
val cameraProviderFuture =
ProcessCameraProvider.getInstance(this)
cameraProviderFuture.addListener({
val cameraProvider = cameraProviderFuture.get()
// Preview बनाना
val preview = Preview.Builder()
.build()
.also {
it.setSurfaceProvider(
binding.viewFinder.surfaceProvider
)
}
// ImageCapture बनाना
val imageCapture = ImageCapture.Builder()
.setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
.build()
// Lifecycle से बाइंड करना
cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(
this,
CameraSelector.DEFAULT_BACK_CAMERA,
preview,
imageCapture
)
}, ContextCompact.getMainExecutor(this))
Kotlin कोड एक future के माध्यम से ProcessCameraProvider प्राप्त करता है, Preview और ImageCapture use cases बनाता है, और उन्हें वर्तमान Activity Lifecycle से बाइंड करता है। CameraX स्वचालित रूप से स्क्रीन रोटेशन, कैमरा स्विचिंग और Activity बंद होने पर संसाधन मुक्ति को संभालता है।
आइए कैमरा स्ट्रीम के प्रति-फ्रेम प्रोसेसिंग के लिए एक ImageAnalysis use case जोड़ें, उदाहरण के लिए ML Kit के साथ एकीकरण के लिए।
val imageAnalysis = ImageAnalysis.Builder()
.setBackpressureStrategy(
ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST
)
.build()
imageAnalysis.setAnalyzer(
ContextCompact.getMainExecutor(this)
) { imageProxy ->
// ML Kit के लिए YUV को Bitmap में बदलना
val bitmap = ImageUtils.yuvToBitmap(imageProxy)
val inputImage = InputImage.fromBitmap(bitmap)
// ML Kit टेक्स्ट पहचान शुरू करना
recognizer.process(inputImage)
.addOnSuccessListener { result ->
// परिणाम प्रोसेस करना
processTextResult(result)
}
.addOnCompleteListener {
imageProxy.close()
}
}
KEEP_ONLY_LATEST रणनीति के साथ ImageAnalysis केवल नवीनतम उपलब्ध फ्रेम को प्रोसेस करता है, पुराने फ्रेम्स को छोड़ देता है यदि एनालाइज़र गति नहीं रख पा रहा है। प्रत्येक फ्रेम ML Kit के लिए YUV से Bitmap में परिवर्तित किया जाता है, जिसके बाद टेक्स्ट पहचान शुरू की जाती है। imageProxy.close() को कॉल करना अनिवार्य है — अन्यथा CameraX नए फ्रेम्स देना बंद कर देगा।
CameraX Extensions एक मॉड्यूल है जो उन्नत शूटिंग मोड जोड़ता है: पोर्ट्रेट (पृष्ठभूमि धुंधलापन), HDR (विस्तारित गतिशील रेंज), नाइट मोड (कम रोशनी में शूटिंग), ऑटो-रिटच (त्वचा सुधार) और ब्यूटी मोड। एक्सटेंशन केवल उन डिवाइसों पर सक्रिय होते हैं जहाँ कैमरा निर्माता ने OEM कार्यान्वयन प्रदान किया है।
CameraX Extensions का उपयोग करने से पहले, आपको जाँचना होगा कि क्या एक्सटेंशन वर्तमान डिवाइस पर उपलब्ध है। Google ExtensionsManager.isExtensionAvailable के माध्यम से जाँच करने की सलाह देता है।
val extensionsManager =
ExtensionsManager.getInstance(this)
if (extensionsManager.isExtensionAvailable(
cameraProvider,
CameraSelector.DEFAULT_BACK_CAMERA,
ExtensionMode.BOKEH
)) {
// पोर्ट्रेट मोड सक्षम करना
cameraProvider.bindToLifecycle(
this,
CameraSelector.DEFAULT_BACK_CAMERA,
preview,
imageCapture
)
}
कोड ExtensionsManager के माध्यम से BOKEH (पोर्ट्रेट) एक्सटेंशन के लिए समर्थन की जाँच करता है और इसे सक्षम करता है यदि OEM कार्यान्वयन उपलब्ध है। CameraX स्वचालित रूप से पोर्ट्रेट मोड के लिए कैमरा सेटिंग्स बदलता है। यदि एक्सटेंशन उपलब्ध नहीं है, तो ऐप बिना क्रैश के मानक मोड में काम करना जारी रखता है।
CameraX Extensions Android विकास की मुख्य समस्याओं में से एक को हल करता है: कैमरा विखंडन। विभिन्न डिवाइसों पर, पोर्ट्रेट मोड अलग-अलग तरीके से लागू किया जाता है — कुछ दोहरे लेंस का उपयोग करते हैं, अन्य सॉफ़्टवेयर धुंधलापन का उपयोग करते हैं। CameraX इस अंतर को एब्स्ट्रैक्ट करता है: डेवलपर BOKEH मोड सक्षम करता है, और लाइब्रेरी स्वयं निर्धारित करती है कि इसे एक विशिष्ट डिवाइस पर कैसे लागू किया जाए। Google सत्यापित OEM भागीदारों की एक सूची बनाए रखता है: Samsung, Xiaomi, OPPO, vivo, Google Pixel।
CameraX के साथ काम करते समय, एक साथ use cases की संख्या पर सीमाओं पर विचार करना महत्वपूर्ण है: अधिकांश डिवाइसों पर, अधिकतम 3 use cases एक साथ चलाए जा सकते हैं। उदाहरण के लिए, Preview + ImageCapture + ImageAnalysis सभी आधुनिक डिवाइसों पर काम करता है, लेकिन Preview + ImageCapture + VideoCapture बजट मॉडलों पर समर्थित नहीं हो सकता है। CameraX ProcessCameraProvider.checkAvailability() विधि प्रदान करता है, जो बाइंडिंग से पहले use case संयोजन संगतता की जाँच करता है, रनटाइम क्रैश से बचने में मदद करता है।
CameraX CameraXFragment या Compose-संगत PreviewView के माध्यम से Jetpack Navigation के साथ एकीकृत होता है। Compose के लिए, AndroidView तत्व का उपयोग किया जाता है, जिसमें PreviewView एम्बेड किया जाता है। CameraX कैमरा सेशन स्थिति खोए बिना स्क्रीन रोटेशन और कॉन्फ़िगरेशन परिवर्तनों को सही ढंग से संभालता है — बस LifecycleOwner निर्दिष्ट करें, और लाइब्रेरी डिवाइस घूमने पर स्वचालित रूप से use case बाइंडिंग को पुनः बनाएगी।
वास्तविक डिवाइस के बिना CameraX का परीक्षण करने के लिए, Google TestableCameraX प्रदान करता है — एक लाइब्रेरी जो यूनिट परीक्षणों में कैमरा व्यवहार का अनुकरण करती है। TestableCameraX कैमरा फ्रेम्स का अनुकरण करने, ImageAnalysis संचालन और ImageCapture सटीकता का भौतिक डिवाइस के बिना परीक्षण करने की अनुमति देता है। यह कैमरे के साथ काम करने वाली परियोजनाओं के लिए CI/CD पाइपलाइन को काफी तेज करता है।
अक्सर पूछे जाने वाले प्रश्न
Android 5.0 (API 21) और उससे ऊपर। CameraX 99% सक्रिय Android डिवाइसों को कवर करता है। एक्सटेंशन (Portrait, HDR) के लिए API 23+ और विशिष्ट मोड के लिए OEM समर्थन आवश्यक है।
हाँ, ImageAnalysis use case प्रत्येक फ्रेम को एनालाइज़र को भेजता है। फ्रेम्स ML Kit के लिए YUV_420_888 से InputImage में परिवर्तित किए जाते हैं। ML स्कैनर बनाने के लिए यह मानक पैटर्न है।
CameraX use case आर्किटेक्चर, स्वचालित Lifecycle बाइंडिंग और डिवाइस-विशिष्ट अंतरों के प्रबंधन के साथ एक उच्च-स्तरीय API है। Camera2 एक निम्न-स्तरीय API है जो बड़ी मात्रा में boilerplate कोड के साथ पूर्ण कैमरा नियंत्रण प्रदान करता है।
हाँ, VideoCapture use case CameraX 1.1.0-beta में जोड़ा गया था। यह माइक्रोफ़ोन के साथ वीडियो रिकॉर्ड करता है और Preview के साथ सिंक्रोनाइज़ होता है। अधिक जटिल परिदृश्यों के लिए, सीधे Camera2 का उपयोग करें।
CameraSelector के माध्यम से: DEFAULT_BACK_CAMERA या DEFAULT_FRONT_CAMERA। स्विच करने के लिए, नए सेलेक्टर के साथ cameraProvider.bindToLifecycle() कॉल करें — CameraX स्वचालित रूप से सेशन पुनः शुरू करेगा।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें