ভিডিও ও অডিও প্লেব্যাক ক্যাপচার করুন

কোনও অ্যাপ অন্য অ্যাপ থেকে চালানো ভিডিও বা অডিও রেকর্ড করতে পারে। এই ধরনের অ্যাপকে অবশ্যই MediaProjection টোকেন সঠিকভাবে ম্যানেজ করতে হবে। এই পৃষ্ঠায় কীভাবে তা করা যায় তা ব্যাখ্যা করা হয়েছে। এছাড়াও, এটি দেখায় যে কীভাবে ডিভাইস অ্যাডমিন যেকোনও স্ক্রিন স্ন্যাপশট রেকর্ড করার ক্ষমতা বন্ধ করতে পারে এবং কীভাবে একটি অডিও অ্যাপ অন্যান্য অ্যাপকে তার চালানো কন্টেন্ট রেকর্ড করা থেকে আটকাতে পারে।

MediaProjection টোকেন কীভাবে ম্যানেজ করবেন

MediaProjection API অ্যাপকে MediaProjection টোকেন পাওয়ার অনুমতি দেয় যা তাদের স্ক্রিন কন্টেন্ট বা অডিও ক্যাপচার করার জন্য একবার অ্যাক্সেস দেয়। আপনার অ্যাপকে টোকেন দেওয়ার আগে Android OS ব্যবহারকারীর কাছে অনুমতি চায়।

OS, 'দ্রুত সেটিংস' UI-তে অ্যাক্টিভ MediaProjection টোকেন দেখায় এবং ব্যবহারকারীদের যেকোনও সময় টোকেনের অ্যাক্সেস প্রত্যাহার করার অনুমতি দেয়। এটি হলে, সেশনের সাথে যুক্ত ভার্চুয়াল ডিসপ্লে বা অডিও স্ট্রিম মিডিয়া স্ট্রিম পাওয়া বন্ধ করে দেয়। আপনার অ্যাপকে যথাযথভাবে উত্তর দিতে হবে, অন্যথায় এটি অডিও সাইলেন্স বা ব্ল্যাক ভিডিও স্ট্রিম রেকর্ড করা চালিয়ে যাবে।

টোকেন হারিয়ে গেলে, MediaProjection ইনস্ট্যান্সে registerCallback পদ্ধতি ব্যবহার করে কলব্যাক রেজিস্টার করুন এবং onStop পদ্ধতি কল করা হলে রেকর্ডিং বন্ধ করুন।

আরও তথ্যের জন্য, মিডিয়া প্রোজেকশন দেখুন।

ভিডিও ক্যাপচার করুন

স্ক্রিন রেকর্ডিং আটকাতে আপনি DevicePolicyManager ব্যবহার করতে পারেন। এন্টারপ্রাইজ অ্যাকাউন্টের (Android for Work) জন্য, অ্যাডমিনিস্ট্রেটর setScreenCaptureDisabled পদ্ধতি ব্যবহার করে অফিস প্রোফাইলের জন্য Assistant ডেটা সংগ্রহ করার সুবিধা বন্ধ করতে পারবেন।

অ্যাপ ছাড়াই Android ডিভাইস ম্যানেজ করা কোডল্যাব থেকে স্ক্রিনশট নেওয়া কীভাবে বন্ধ করতে হয় তা জানা যায়।

অডিও প্লেব্যাক ক্যাপচার করুন

Android ১০-এ AudioPlaybackCapture API প্রথমবার নিয়ে আসা হয়। এই API অন্য অ্যাপের মাধ্যমে চালানো অডিও কপি করার ক্ষমতা অ্যাপকে দেয়। এই ফিচারটি স্ক্রিন ক্যাপচারের অ্যানালগ, তবে অডিওর জন্য। প্রাথমিক ব্যবহারের ক্ষেত্র হল স্ট্রিমিং অ্যাপের জন্য যা গেমে চালানো অডিও ক্যাপচার করতে চায়।

মনে রাখবেন যে AudioPlaybackCapture API সেই অ্যাপের লেটেন্সিকে প্রভাবিত করে না যার অডিও ক্যাপচার করা হচ্ছে।

ক্যাপচার অ্যাপ তৈরি করা

নিরাপত্তা ও গোপনীয়তার জন্য, প্লেব্যাক ক্যাপচার কিছু সীমাবদ্ধতা আরোপ করে। অডিও ক্যাপচার করতে, কোনও অ্যাপকে অবশ্যই এইসব প্রয়োজনীয়তা পূরণ করতে হবে:

  • অ্যাপের কাছে অবশ্যই RECORD_AUDIO অনুমতি থাকতে হবে।
  • অ্যাপকে অবশ্যই MediaProjectionManager.createScreenCaptureIntent()-এর দেখানো প্রম্পট দেখাতে হবে এবং ব্যবহারকারীকে অবশ্যই এটি অনুমোদন করতে হবে।
  • ক্যাপচারিং ও প্লেয়িং অ্যাপ একই ব্যবহারকারীর প্রোফাইলে থাকতে হবে।

অন্য অ্যাপ থেকে অডিও ক্যাপচার করতে, আপনার অ্যাপকে অবশ্যই একটি AudioRecord অবজেক্ট তৈরি করতে হবে এবং এতে একটি AudioPlaybackCaptureConfiguration যোগ করতে হবে। এইসব ধাপ অনুসরণ করুন:

  1. AudioPlaybackCaptureConfiguration তৈরি করতে AudioPlaybackCaptureConfiguration.Builder.build()-এ কল করুন।
  2. setAudioPlaybackCaptureConfig কল করে AudioRecord-এ কনফিগারেশন পাস করুন।

অডিও ক্যাপচার কন্ট্রোল করা

আপনার অ্যাপ কোন ধরনের কন্টেন্ট রেকর্ড করতে পারবে এবং অন্য কোন ধরনের অ্যাপ নিজস্ব প্লেব্যাক রেকর্ড করতে পারবে তা নিয়ন্ত্রণ করতে পারবে।

অডিও কন্টেন্ট দ্বারা ক্যাপচার সীমাবদ্ধ করা হচ্ছে

এইসব পদ্ধতি ব্যবহার করে কোনও অ্যাপ কোন অডিও ক্যাপচার করতে পারবে তা সীমিত করতে পারে:

  • নির্দিষ্ট ব্যবহার ক্যাপচার করার অনুমতি দিতে AudioPlaybackCaptureConfiguration.Builder.addMatchingUsage()-এ AUDIO_USAGE পাস করুন। একাধিক ব্যবহার নির্দিষ্ট করতে মেথডটি একাধিকবার কল করুন।
  • AUDIO_USAGE-কে AudioPlaybackCaptureConfiguration.excludeUsage()-এ পাস করুন যাতে সেই ব্যবহার ক্যাপচার করা বন্ধ করা যায়। একাধিক ব্যবহার নির্দিষ্ট করতে মেথডটি একাধিকবার কল করুন।
  • শুধুমাত্র নির্দিষ্ট UID সহ অ্যাপ ক্যাপচার করতে AudioPlaybackCaptureConfiguration.addMatchingUid()-এ UID পাস করুন। একাধিক UID নির্দিষ্ট করতে মেথডটি একাধিকবার কল করুন।
  • UID ক্যাপচার করা বন্ধ করতে AudioPlaybackCaptureConfiguration.excludeUid()-এ UID পাস করুন। একাধিক UID নির্দিষ্ট করতে মেথডটি একাধিকবার কল করুন।

মনে রাখবেন, আপনি 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
সত্য যেকোনও অ্যাপ শুধুমাত্র সিস্টেম ক্যাপচার করা হয়নি
মিথ্যা শুধুমাত্র সিস্টেম শুধুমাত্র সিস্টেম ক্যাপচার করা হয়নি