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

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

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

MediaProjection API की मदद से, ऐप्लिकेशन को 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 करना है. यह तरीक़ा अपनाएँ:

  1. AudioPlaybackCaptureConfiguration बनाने के लिए, AudioPlaybackCaptureConfiguration.Builder.build() को कॉल करें.
  2. setAudioPlaybackCaptureConfig को कॉल करके, कॉन्फ़िगरेशन को AudioRecord को पास करें.

ऑडियो कैप्चर को कंट्रोल करना

आपका ऐप्लिकेशन यह कंट्रोल कर सकता है कि वह किस तरह का कॉन्टेंट रिकॉर्ड कर सकता है और किस तरह का कॉन्टेंट रिकॉर्ड कर सकता है ऐप्लिकेशन के अलग-अलग तरह के ऐप्लिकेशन अपना खुद का प्लेबैक रिकॉर्ड कर सकते हैं.

ऑडियो कॉन्टेंट के हिसाब से कैप्चर को सीमित करना

इनका इस्तेमाल करके, ऐप्लिकेशन यह तय कर सकता है कि कौनसा ऑडियो कैप्चर किया जा सकता है तरीका:

ध्यान दें कि 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
सही कोई भी ऐप्लिकेशन सिर्फ़ सिस्टम के लिए कोई कैप्चर नहीं
गलत सिर्फ़ सिस्टम सिर्फ़ सिस्टम के लिए कोई कैप्चर नहीं