कोई ऐप्लिकेशन, किसी दूसरे ऐप्लिकेशन से चलाए जा रहे वीडियो या ऑडियो को रिकॉर्ड कर सकता है. ऐसे ऐप्लिकेशन को MediaProjection टोकन को सही तरीके से मैनेज करना चाहिए. इस पेज पर, यह बताया गया है कि कैसे. इसमें यह भी बताया गया है कि डिवाइस एडमिन, स्क्रीन के स्नैपशॉट रिकॉर्ड करने की सुविधा को कैसे बंद कर सकता है. साथ ही, यह भी बताया गया है कि कोई ऑडियो ऐप्लिकेशन, दूसरे ऐप्लिकेशन को अपने कॉन्टेंट को रिकॉर्ड करने से कैसे रोक सकता है.
MediaProjection टोकन को मैनेज करने का तरीका
MediaProjection एपीआई की मदद से, ऐप्लिकेशन को MediaProjection टोकन मिलता है. इससे उन्हें स्क्रीन पर मौजूद कॉन्टेंट या ऑडियो को कैप्चर करने का एक बार ऐक्सेस मिलता है. Android OS, आपके ऐप्लिकेशन को टोकन देने से पहले, उपयोगकर्ता से अनुमति मांगता है.
ओएस, क्विक सेटिंग के यूज़र इंटरफ़ेस (यूआई) में चालू MediaProjection टोकन दिखाता है. साथ ही, उपयोगकर्ताओं को किसी भी समय टोकन का ऐक्सेस वापस लेने की अनुमति देता है. ऐसा होने पर, सेशन से जुड़े वर्चुअल डिसप्ले या ऑडियो स्ट्रीम को मीडिया स्ट्रीम मिलना बंद हो जाती हैं. आपके ऐप्लिकेशन को सही तरीके से काम करना चाहिए. ऐसा न होने पर, वह ऑडियो के बिना वीडियो या ब्लैक वीडियो स्ट्रीम रिकॉर्ड करता रहेगा.
टोकन के नुकसान को मैनेज करने के लिए, registerCallback तरीके का इस्तेमाल करके, MediaProjection इंस्टेंस पर कॉलबैक रजिस्टर करें. साथ ही, onStop तरीके को कॉल करने पर रिकॉर्डिंग बंद करें.
ज़्यादा जानकारी के लिए, मीडिया प्रोजेक्शन देखें.
वीडियो कैप्चर करें
स्क्रीन रिकॉर्डिंग को रोकने के लिए, DevicePolicyManager का इस्तेमाल किया जा सकता है. काम से जुड़े खातों (Android for Work) के लिए, एडमिन setScreenCaptureDisabled तरीके का इस्तेमाल करके, वर्क प्रोफ़ाइल के लिए Assistant का डेटा इकट्ठा करने की सुविधा बंद कर सकता है.
ऐप्लिकेशन के बिना Android डिवाइसों को मैनेज करना कोडलैब में, स्क्रीनशॉट लेने की सुविधा को बंद करने का तरीका बताया गया है.
ऑडियो प्लेबैक कैप्चर करना
AudioPlaybackCapture API को Android 10 में लॉन्च किया गया था. इस एपीआई की मदद से, ऐप्लिकेशन दूसरे ऐप्लिकेशन पर चल रहे ऑडियो को कॉपी कर सकते हैं. यह सुविधा, स्क्रीन कैप्चर करने की सुविधा जैसी ही है. हालांकि, यह ऑडियो के लिए है. इसका इस्तेमाल मुख्य रूप से ऐसे स्ट्रीमिंग ऐप्लिकेशन के लिए किया जाता है जो गेम से चलने वाले ऑडियो को कैप्चर करना चाहते हैं.
ध्यान दें कि AudioPlaybackCapture API, उस ऐप्लिकेशन की इंतज़ार अवधि पर असर नहीं डालता जिसका ऑडियो कैप्चर किया जा रहा है.
कैप्चर ऐप्लिकेशन बनाना
सुरक्षा और निजता की वजहों से, प्लेबैक कैप्चर करने की सुविधा पर कुछ पाबंदियां लागू होती हैं. ऑडियो कैप्चर करने के लिए, किसी ऐप्लिकेशन को ये ज़रूरी शर्तें पूरी करनी होंगी:
- ऐप्लिकेशन के पास
RECORD_AUDIOकी अनुमति होनी चाहिए. - ऐप्लिकेशन को
MediaProjectionManager.createScreenCaptureIntent()से दिखाया गया प्रॉम्प्ट दिखाना चाहिए और उपयोगकर्ता को इसे स्वीकार करना चाहिए. - कैप्चर और प्ले करने वाले ऐप्लिकेशन, उपयोगकर्ता की एक ही प्रोफ़ाइल में होने चाहिए.
किसी दूसरे ऐप्लिकेशन से ऑडियो कैप्चर करने के लिए, आपके ऐप्लिकेशन को एक
AudioRecord ऑब्जेक्ट
बनाना होगा
और उसमें एक
AudioPlaybackCaptureConfiguration
जोड़ना होगा. ऐसा करने के लिए यह तरीका अपनाएं:
AudioPlaybackCaptureConfigurationबनाने के लिए,AudioPlaybackCaptureConfiguration.Builder.build()को कॉल करें.setAudioPlaybackCaptureConfigको कॉल करके, कॉन्फ़िगरेशन कोAudioRecordपर पास करें.
ऑडियो कैप्चर को कंट्रोल करना
आपका ऐप्लिकेशन यह कंट्रोल कर सकता है कि वह किस तरह का कॉन्टेंट रिकॉर्ड कर सकता है. साथ ही, यह भी कंट्रोल कर सकता है कि किस तरह के अन्य ऐप्लिकेशन, उसके प्लेबैक को रिकॉर्ड कर सकते हैं.
ऑडियो कॉन्टेंट के हिसाब से कैप्चर करने की सुविधा को सीमित करना
कोई ऐप्लिकेशन, इन तरीकों का इस्तेमाल करके यह तय कर सकता है कि वह कौनसा ऑडियो कैप्चर कर सकता है:
- किसी खास इस्तेमाल को कैप्चर करने की अनुमति देने के लिए, AudioPlaybackCaptureConfiguration.Builder.addMatchingUsage() को
AUDIO_USAGEपास करें. एक से ज़्यादा इस्तेमाल बताने के लिए, इस तरीके को कई बार कॉल करें. - AudioPlaybackCaptureConfiguration.excludeUsage() में
AUDIO_USAGEपास करें, ताकि उस ऑडियो को कैप्चर करने से रोका जा सके. एक से ज़्यादा इस्तेमाल के बारे में बताने के लिए, इस तरीके को कई बार कॉल करें. - सिर्फ़ किसी खास यूआईडी वाले ऐप्लिकेशन का ऑडियो कैप्चर करने के लिए, AudioPlaybackCaptureConfiguration.addMatchingUid() को यूआईडी पास करें. एक से ज़्यादा यूआईडी तय करने के लिए, इस तरीके को कई बार कॉल करें.
- AudioPlaybackCaptureConfiguration.excludeUid() को यूआईडी पास करें, ताकि उस यूआईडी को कैप्चर न किया जा सके. एक से ज़्यादा यूआईडी तय करने के लिए, इस तरीके को कई बार कॉल करें.
ध्यान दें कि addMatchingUsage() और excludeUsage() तरीकों का इस्तेमाल एक साथ नहीं किया जा सकता. आपको इनमें से किसी एक को चुनना होगा. इसी तरह, addMatchingUid() और excludeUid() का इस्तेमाल एक साथ नहीं किया जा सकता.
दूसरे ऐप्लिकेशन से कैप्चर करने पर पाबंदी लगाना
किसी ऐप्लिकेशन को इस तरह कॉन्फ़िगर किया जा सकता है कि दूसरे ऐप्लिकेशन उसका ऑडियो कैप्चर न कर पाएं. किसी ऐप्लिकेशन से आने वाले ऑडियो को सिर्फ़ तब कैप्चर किया जा सकता है, जब वह ऐप्लिकेशन इन ज़रूरी शर्तों को पूरा करता हो:
इस्तेमाल
ऑडियो चलाने वाले प्लेयर को इसके इस्तेमाल को USAGE_MEDIA, USAGE_GAME या USAGE_UNKNOWN पर सेट करना होगा.
कैप्चर करने से जुड़ी नीति
प्लेयर की कैप्चर नीति
AudioAttributes.ALLOW_CAPTURE_BY_ALL होनी चाहिए,
जिससे अन्य ऐप्लिकेशन को प्लेबैक कैप्चर करने की अनुमति मिलती है. ऐसा कई तरीकों से किया जा सकता है:
- सभी प्लेयर पर कैप्चर करने की सुविधा चालू करने के लिए, ऐप्लिकेशन की
manifest.xmlफ़ाइल मेंandroid:allowAudioPlaybackCapture="true"शामिल करें. AudioManager.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)को कॉल करके, सभी प्लेयर के लिए कैप्चर करने की सुविधा चालू की जा सकती है.AudioAttributes.Builder.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)का इस्तेमाल करके, किसी प्लेयर को बनाते समय उसके लिए नीति सेट की जा सकती है. (अगरAAudioका इस्तेमाल किया जा रहा है, तोAAudioStreamBuilder_setAllowedCapturePolicy(AAUDIO_ALLOW_CAPTURE_BY_ALL)को कॉल करें.)
अगर ये ज़रूरी शर्तें पूरी होती हैं, तो प्लेयर से जनरेट होने वाले किसी भी ऑडियो को कैप्चर किया जा सकता है.
सिस्टम कैप्चर की सुविधा बंद की जा रही है
कैप्चर करने की अनुमति देने वाली सुरक्षा सुविधाएं, सिर्फ़ ऐप्लिकेशन पर लागू होती हैं. इनके बारे में ऊपर बताया गया है. Android सिस्टम के कॉम्पोनेंट, डिफ़ॉल्ट रूप से वीडियो चलाने की सुविधा को कैप्चर कर सकते हैं.
इनमें से कई कॉम्पोनेंट को Android वेंडर, अपनी ज़रूरत के हिसाब से बनाते हैं. इनमें सुलभता और कैप्शन जैसी सुविधाएं भी शामिल होती हैं. इसलिए, हमारा सुझाव है कि ऐप्लिकेशन, सिस्टम को अपना ऑडियो कैप्चर करने की अनुमति दें. अगर आपको सिस्टम से अपने ऐप्लिकेशन का प्लेबैक कैप्चर नहीं करवाना है, तो कैप्चर करने की नीति को ALLOW_CAPTURE_BY_NONE पर सेट करें. हालांकि, ऐसा बहुत कम मामलों में होता है.
रनटाइम के दौरान नीति सेट करना
ऐप्लिकेशन के चलने के दौरान, कैप्चर करने की नीति को बदलने के लिए, AudioManager.setAllowedCapturePolicy() को कॉल किया जा सकता है. अगर इस तरीके को कॉल करते समय कोई MediaPlayer या AudioTrack चल रहा है, तो ऑडियो पर कोई असर नहीं पड़ता. नीति में हुए बदलाव को लागू करने के लिए,
आपको प्लेयर या ट्रैक को बंद करके फिर से खोलना होगा.
नीति = मेनिफ़ेस्ट + AudioManager + AudioAttributes
कैप्चर करने की नीति को कई जगहों पर तय किया जा सकता है. इसलिए, यह समझना ज़रूरी है कि लागू होने वाली नीति कैसे तय की जाती है.
सबसे ज़्यादा पाबंदी वाली कैप्चर नीति हमेशा लागू होती है. उदाहरण के लिए, अगर किसी ऐप्लिकेशन के मेनिफ़ेस्ट में setAllowedCapturePolicy="false" शामिल है, तो वह सिस्टम से बाहर के ऐप्लिकेशन को अपना ऑडियो कैप्चर करने की अनुमति कभी नहीं देगा. भले ही, AudioManager#setAllowedCapturePolicy को ALLOW_CAPTURE_BY_ALL पर सेट किया गया हो. इसी तरह, अगर AudioManager#setAllowedCapturePolicy को ALLOW_CAPTURE_BY_ALL पर सेट किया गया है और मेनिफ़ेस्ट में setAllowedCapturePolicy="true" सेट किया गया है, लेकिन मीडिया प्लेयर के AudioAttributes को AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM) की मदद से बनाया गया है, तो इस मीडिया प्लेयर को सिस्टम के अलावा अन्य ऐप्लिकेशन कैप्चर नहीं कर पाएंगे.
नीचे दी गई टेबल में, मेनिफ़ेस्ट एट्रिब्यूट और लागू होने वाली नीति के असर के बारे में खास जानकारी दी गई है:
| allowAudioPlaybackCapture | ALLOW_CAPTURE_BY_ALL | ALLOW_CAPTURE_BY_SYSTEM | ALLOW_CAPTURE_BY_NONE |
|---|---|---|---|
| सही | कोई भी ऐप्लिकेशन | सिर्फ़ सिस्टम | कोई कैप्चर नहीं |
| गलत | सिर्फ़ सिस्टम | सिर्फ़ सिस्टम | कोई कैप्चर नहीं |