वीडियो और ऑडियो प्लेबैक कैप्चर करें

कोई ऐप्लिकेशन, किसी दूसरे ऐप्लिकेशन से चलाए जा रहे वीडियो या ऑडियो को रिकॉर्ड कर सकता है. ऐसे ऐप्लिकेशन को MediaProjection टोकन को सही तरीके से मैनेज करना चाहिए. इस पेज पर, यह बताया गया है कि कैसे. इसमें यह भी बताया गया है कि डिवाइस एडमिन, स्क्रीन के स्नैपशॉट रिकॉर्ड करने की सुविधा को कैसे बंद कर सकता है. साथ ही, यह भी बताया गया है कि कोई ऑडियो ऐप्लिकेशन, अन्य ऐप्लिकेशन को अपने कॉन्टेंट को रिकॉर्ड करने से कैसे रोक सकता है.

MediaProjection टोकन को मैनेज करने का तरीका

MediaProjection एपीआई की मदद से, ऐप्लिकेशन को MediaProjection टोकन मिलता है. इससे उन्हें स्क्रीन पर मौजूद कॉन्टेंट या ऑडियो को कैप्चर करने का एक बार ऐक्सेस मिलता है. Android OS, आपके ऐप्लिकेशन को टोकन देने से पहले, उपयोगकर्ता से अनुमति मांगता है.

ओएस, क्विक सेटिंग के यूज़र इंटरफ़ेस (यूआई) में चालू MediaProjection टोकन दिखाता है. साथ ही, उपयोगकर्ताओं को किसी भी समय टोकन का ऐक्सेस वापस लेने की अनुमति देता है. ऐसा होने पर, सेशन से जुड़े वर्चुअल डिसप्ले या ऑडियो स्ट्रीम को मीडिया स्ट्रीम मिलना बंद हो जाती हैं. आपके ऐप्लिकेशन को सही तरीके से जवाब देना चाहिए. ऐसा न होने पर, वह ऑडियो साइलेंस या ब्लैक वीडियो स्ट्रीम रिकॉर्ड करता रहेगा.

टोकन के नुकसान को मैनेज करने के लिए, registerCallback तरीके का इस्तेमाल करके, MediaProjection इंस्टेंस पर कॉलबैक रजिस्टर करें. साथ ही, onStop तरीके को कॉल करने पर रिकॉर्डिंग बंद करें.

ज़्यादा जानकारी के लिए, मीडिया प्रोजेक्शन देखें.

वीडियो कैप्चर करें

स्क्रीन रिकॉर्डिंग को रोकने के लिए, DevicePolicyManager का इस्तेमाल किया जा सकता है. काम से जुड़े खातों (Android for Work) के लिए, एडमिन setScreenCaptureDisabled तरीके का इस्तेमाल करके, वर्क प्रोफ़ाइल के लिए असिस्टेंट का डेटा इकट्ठा करने की सुविधा बंद कर सकता है.

ऐप्लिकेशन के बिना Android डिवाइसों को मैनेज करना कोडलैब में, स्क्रीनशॉट लेने की सुविधा को बंद करने का तरीका बताया गया है.

ऑडियो प्लेबैक कैप्चर करना

AudioPlaybackCapture API को Android 10 में लॉन्च किया गया था. इस एपीआई की मदद से, ऐप्लिकेशन दूसरे ऐप्लिकेशन पर चल रहे ऑडियो को कॉपी कर सकते हैं. यह सुविधा, स्क्रीन कैप्चर करने की सुविधा जैसी ही है, लेकिन यह ऑडियो के लिए है. इसका इस्तेमाल मुख्य रूप से स्ट्रीमिंग ऐप्लिकेशन के लिए किया जाता है, ताकि गेम में चल रहे ऑडियो को कैप्चर किया जा सके.

ध्यान दें कि AudioPlaybackCapture API, उस ऐप्लिकेशन की लेटेंसी पर असर नहीं डालता जिसका ऑडियो कैप्चर किया जा रहा है.

कैप्चर ऐप्लिकेशन बनाना

सुरक्षा और निजता बनाए रखने के लिए, प्लेबैक कैप्चर की सुविधा पर कुछ सीमाएं लागू होती हैं. ऑडियो कैप्चर करने के लिए, किसी ऐप्लिकेशन को ये ज़रूरी शर्तें पूरी करनी होंगी:

  • ऐप्लिकेशन के पास RECORD_AUDIO की अनुमति होनी चाहिए.
  • ऐप्लिकेशन को MediaProjectionManager.createScreenCaptureIntent() से दिखाया गया प्रॉम्प्ट दिखाना चाहिए और उपयोगकर्ता को इसे स्वीकार करना चाहिए.
  • कैप्चर करने और चलाने वाले ऐप्लिकेशन, एक ही उपयोगकर्ता की प्रोफ़ाइल में होने चाहिए.

किसी दूसरे ऐप्लिकेशन से ऑडियो कैप्चर करने के लिए, आपके ऐप्लिकेशन को एक AudioRecord ऑब्जेक्ट बनाना होगा और उसमें एक AudioPlaybackCaptureConfiguration जोड़ना होगा. ऐसा करने के लिए यह तरीका अपनाएं:

  1. AudioPlaybackCaptureConfiguration बनाने के लिए, AudioPlaybackCaptureConfiguration.Builder.build() को कॉल करें.
  2. 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 होनी चाहिए, जिससे अन्य ऐप्लिकेशन को प्लेबैक कैप्चर करने की अनुमति मिलती है. ऐसा कई तरीकों से किया जा सकता है:

अगर ये ज़रूरी शर्तें पूरी होती हैं, तो प्लेयर से जनरेट होने वाले किसी भी ऑडियो को कैप्चर किया जा सकता है.

सिस्टम कैप्चर की सुविधा बंद करना

कैप्चर करने की अनुमति देने वाली सुरक्षा सुविधाएं, सिर्फ़ ऐप्लिकेशन पर लागू होती हैं. इनके बारे में ऊपर बताया गया है. 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
सही कोई भी ऐप्लिकेशन सिर्फ़ सिस्टम कोई कैप्चर नहीं
गलत सिर्फ़ सिस्टम सिर्फ़ सिस्टम कोई कैप्चर नहीं