कोई ऐप्लिकेशन, किसी दूसरे ऐप्लिकेशन से चलाए जा रहे वीडियो या ऑडियो को रिकॉर्ड कर सकता है. ऐसे ऐप्लिकेशन को MediaProjection
टोकन को सही तरीके से मैनेज करना होगा. इस पेज पर, इसके बारे में बताया गया है. इसमें यह भी बताया गया है कि डिवाइस का एडमिन, स्क्रीन का स्नैपशॉट रिकॉर्ड करने की सुविधा को कैसे बंद कर सकता है. साथ ही, यह भी बताया गया है कि कोई ऑडियो ऐप्लिकेशन, दूसरे ऐप्लिकेशन को अपने चलाए जा रहे कॉन्टेंट को रिकॉर्ड करने से कैसे रोक सकता है.
MediaProjection
टोकन को मैनेज करने का तरीका
MediaProjection
एपीआई, ऐप्लिकेशन को MediaProjection
टोकन पाने की अनुमति देता है. इससे उन्हें स्क्रीन पर मौजूद कॉन्टेंट या ऑडियो को कैप्चर करने के लिए, एक बार ऐक्सेस मिलता है. Android OS आपके ऐप्लिकेशन को टोकन देने से पहले
उपयोगकर्ता से उनकी अनुमति मांगता है.
ओएस, क्विक सेटिंग यूज़र इंटरफ़ेस (यूआई) में चालू MediaProjection
टोकन दिखाता है. साथ ही, उपयोगकर्ताओं को यह अनुमति देता है कि वे किसी भी समय टोकन का ऐक्सेस वापस ले सकते हैं. ऐसा होने पर, सेशन से जुड़े वर्चुअल डिसप्ले या ऑडियो स्ट्रीम को मीडिया स्ट्रीम मिलना बंद हो जाती हैं. आपका ऐप्लिकेशन सही तरीके से जवाब देना चाहिए. ऐसा न करने पर, वह ऑडियो के बिना या ब्लैक वीडियो स्ट्रीम को रिकॉर्ड करना जारी रखेगा.
टोकन के खो जाने की समस्या को हल करने के लिए, MediaProjection
इंस्टेंस पर registerCallback
तरीका इस्तेमाल करके कॉलबैक रजिस्टर करें. साथ ही, onStop
तरीका इस्तेमाल करने पर रिकॉर्डिंग रोकें.
ज़्यादा जानकारी के लिए, मीडिया प्रोजेक्शन लेख पढ़ें.
वीडियो कैप्चर करें
किसी डिवाइस की स्क्रीन को रीयल टाइम में कैप्चर करने और उसे SurfaceView पर दिखाने के लिए, Media Projection API का इस्तेमाल करने का तरीका जानने के लिए, ScreenCapture सैंपल ऐप्लिकेशन देखें.
स्क्रीन रिकॉर्डिंग को रोकने के लिए, 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
को कॉन्फ़िगरेशन पास करें.
ऑडियो कैप्चर को कंट्रोल करना
आपका ऐप्लिकेशन यह कंट्रोल कर सकता है कि वह किस तरह का कॉन्टेंट रिकॉर्ड कर सकता है. साथ ही, यह भी कंट्रोल कर सकता है कि किस तरह के दूसरे ऐप्लिकेशन अपना वीडियो रिकॉर्ड कर सकते हैं.
ऑडियो कॉन्टेंट कैप्चर करने से रोकना
कोई ऐप्लिकेशन इन तरीकों का इस्तेमाल करके, यह तय कर सकता है कि उसे कौनसा ऑडियो कैप्चर करना है:
- किसी खास तरह के इस्तेमाल को कैप्चर करने की अनुमति देने के लिए, ऑडियो प्लेबैक कैप्चर कॉन्फ़िगरेशन.addMatchingUsage() के लिए
AUDIO_USAGE
पास करें. एक से ज़्यादा उपयोग तय करने के लिए तरीके को कई बार कॉल करें. - AudioPlaybackCaptureConfiguration.excludeUsage() को
AUDIO_USAGE
पास करें, ताकि उस यूआरएल के इस्तेमाल को कैप्चर करने पर पाबंदी लगाई जा सके. एक से ज़्यादा इस्तेमाल के बारे में बताने के लिए, इस तरीके को कई बार कॉल करें. - सिर्फ़ किसी खास यूआईडी वाले ऐप्लिकेशन को कैप्चर करने के लिए, AudioPlaybackCaptureConfiguration.addMatchingUid() को यूआईडी पास करें. एक से ज़्यादा यूआईडी तय करने के लिए, इस तरीके को कई बार कॉल करें.
- उस यूआईडी को कैप्चर करने की अनुमति न देने के लिए, ऑडियो प्लेबैक जांचेंConfiguration.एक्सक्लूड() पर यूआईडी पास करें. एक से ज़्यादा यूआईडी तय करने के लिए, इस तरीके को कई बार कॉल करें.
ध्यान दें कि 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 |
---|---|---|---|
सही | कोई भी ऐप्लिकेशन | सिर्फ़ सिस्टम के लिए | कोई कैप्चर नहीं |
गलत | सिर्फ़ सिस्टम | सिर्फ़ सिस्टम के लिए | कोई कैप्चर नहीं |