मुख्य कंटेंट तक स्किप करें

अध्याय 19: हाई-स्पीड वीडियो (High-Speed Video)

स्लो-मोशन वीडियो उन पलों को कैद करता है जिन्हें मानव आँख नहीं देख सकती: 120 fps (4× धीमा) या 240 fps (8× धीमा)। Camera2 API में इसे लागू करने के लिए आपको एक विशेष सेशन टाइप CameraConstrainedHighSpeedCaptureSession का उपयोग करना चाहिए।

आप Android Camera Parameters ऐप के 'Stream Configurations' पैनल में देख सकते हैं कि आपका डिवाइस किन FPS रेंज को सपोर्ट करता है।

स्टैंडर्ड सेशन 240 FPS पर काम क्यों नहीं करेंगे?

240 fps पर कैप्चर करना सामान्य 30 fps से बहुत अलग है:

  • थ्रूपुट (Throughput): 1080p@240fps का मतलब है ~720 MB/s पिक्सेल डेटा, जो मेमोरी पर भारी बोझ डालता है।
  • CPU ओवरहेड: यदि आप सामान्य तरीके से हर सेकंड 240 अलग-अलग CaptureRequest भेजते हैं, तो CPU का उपयोग 70% से अधिक हो सकता है, जिससे फोन गर्म होकर क्रैश हो सकता है।

Constrained High-Speed Capture Session इन समस्याओं को हल करता है। यह कई रिक्वेस्ट को एक ही प्री-वैलिडेटेड बर्स्ट लिस्ट में बदल देता है जिसे हार्डवेयर सीधे प्रोसेस करता है, जिससे CPU पर बोझ बहुत कम हो जाता है।

समर्थित FPS रेंज और स्लो-मोशन फैक्टर

  • 120 fps: 30 fps पर चलाने पर 4× धीमा
  • 240 fps: 30 fps पर चलाने पर 8× धीमा
  • 960 fps: बहुत कम समय के लिए सुपर स्लो-मोशन (अक्सर विशेष हार्डवेयर की ज़रूरत होती है)।

हाई-स्पीड साइज और FPS रेंज क्वेरी करना

समर्थित कॉन्फ़िगरेशन जानने के लिए SCALER_STREAM_CONFIGURATION_MAP के getHighSpeedVideoSizes() और getHighSpeedVideoFpsRangesFor(size) का उपयोग करें। यदि कोई साइज इस लिस्ट में नहीं है, तो HAL उसे हाई-स्पीड के लिए रिजेक्ट कर देगा।

HAL द्वारा लगाए गए प्रतिबंध (Constraints)

हाई-स्पीड सेशन बनाने के लिए कुछ सख्त नियम हैं:

  1. आउटपुट सर्फेस: अधिकतम 2 (आमतौर पर Preview + MediaRecorder)।
  2. साइज: केवल highSpeedVideoSizes से लिए गए साइज ही मान्य हैं।
  3. FPS: फिक्स्ड FPS रेंज (जैसे [240, 240]) होनी चाहिए।
  4. फॉर्मेट: केवल PRIVATE या YUV_420_888 मान्य हैं। JPEG या RAW नहीं।

हाई-स्पीड सेशन और रिकॉर्डिंग सेटअप

स्टेप 1: MediaRecorder बिल्ड करें

स्लो-मोशन के लिए सबसे महत्वपूर्ण लाइन setCaptureRate(fps.toDouble()) है। यह फाइल के मेटाडेटा में बताता है कि इसे 30 fps पर चलाया जाना चाहिए, जिससे स्लो-मोशन प्रभाव मिलता है।

स्टेप 2: हाई-स्पीड सेशन बनाएं

createConstrainedHighSpeedCaptureSession का उपयोग करें और createHighSpeedRequestList के माध्यम से रिक्वेस्ट सबमिट करें। परफॉर्मेंस के लिए पर-फ्रेम कॉलबैक को null रखें।

CPU ओवरहेड तुलना

रिसर्च के अनुसार, 240 fps पर स्टैंडर्ड सेशन की तुलना में हाई-स्पीड सेशन ~8 गुना कम CPU का उपयोग करता है और फ्रेम ड्रॉप को रोकता है।

रिकॉर्डिंग रोकना

हाई-स्पीड रिकॉर्डिंग रोकते समय क्रम का ध्यान रखें: पहले MediaRecorder.stop() कॉल करें, फिर सेशन की रिपीटिंग बर्स्ट को रोकें।

सारांश (Summary)

  • विशेष सेशन: हाई-स्पीड के लिए CameraConstrainedHighSpeedCaptureSession का उपयोग अनिवार्य है।
  • ** createHighSpeedRequestList**: यह CPU के बोझ को कम करने के लिए रिक्वेस्ट को बैच में बदल देता है।
  • स्लो-मोशन: setCaptureRate के माध्यम से रिकॉर्डिंग और प्लेबैक की गति का अंतर सेट करें।
  • प्रतिबंध: अधिकतम 2 सर्फेस और विशिष्ट साइज की अनुमति है।

आगे क्या है

अगले अध्याय में, हम Android 9+ के लॉजिकल मल्टी-कैमरा के बारे में जानेंगे, जो अल्ट्रा-वाइड, वाइड और टेलीफोटो लेंसों के बीच बिना किसी रुकावट के स्विच करने की अनुमति देता है।