ভিডিও এবং অডিও প্লেব্যাক ক্যাপচার

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

MediaProjection টোকেন কীভাবে পরিচালনা করবেন

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

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

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

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

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

মিডিয়া প্রোজেকশন API ব্যবহার করে রিয়েল টাইমে ডিভাইসের স্ক্রিন ক্যাপচার করতে এবং সারফেসভিউতে এটি দেখানোর পদ্ধতি শিখতে ScreenCapture নমুনা অ্যাপটি দেখুন।

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

কোডল্যাব "অ্যাপ ছাড়া অ্যান্ড্রয়েড ডিভাইস পরিচালনা" দেখায় কিভাবে স্ক্রিনশট নেওয়া নিষিদ্ধ করতে হয়।

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

অডিওপ্লেব্যাকক্যাপচার এপিআই অ্যান্ড্রয়েড ১০-এ চালু করা হয়েছিল। এই এপিআই অ্যাপগুলিকে অন্যান্য অ্যাপ দ্বারা প্লে করা অডিও কপি করার ক্ষমতা দেয়। এই বৈশিষ্ট্যটি স্ক্রিন ক্যাপচারের অ্যানালগ, তবে অডিওর জন্য। প্রাথমিক ব্যবহারের ক্ষেত্রে স্ট্রিমিং অ্যাপগুলির জন্য যা গেম দ্বারা প্লে করা অডিও ক্যাপচার করতে চায়।

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

একটি ক্যাপচার অ্যাপ তৈরি করা হচ্ছে

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

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

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

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

অডিও ক্যাপচার নিয়ন্ত্রণ করা হচ্ছে

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

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

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

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

মনে রাখবেন যে আপনি addMatchingUsage() এবং excludeUsage() পদ্ধতি একসাথে ব্যবহার করতে পারবেন না। আপনাকে অবশ্যই একটি বা অন্যটি বেছে নিতে হবে। একইভাবে, আপনি একই সময়ে addMatchingUid() এবং excludeUid() ব্যবহার করতে পারবেন না।

অন্যান্য অ্যাপ দ্বারা ক্যাপচার সীমাবদ্ধ করা

আপনি একটি অ্যাপকে এমনভাবে কনফিগার করতে পারেন যাতে অন্য অ্যাপগুলি তার অডিও ক্যাপচার করতে না পারে। একটি অ্যাপ থেকে আসা অডিও কেবল তখনই ক্যাপচার করা যাবে যদি অ্যাপটি এই প্রয়োজনীয়তাগুলি পূরণ করে:

ব্যবহার

অডিও তৈরি করা প্লেয়ারকে অবশ্যই এর ব্যবহার USAGE_MEDIA , USAGE_GAME , অথবা USAGE_UNKNOWN এ সেট করতে হবে।

ক্যাপচার নীতি

প্লেয়ারের ক্যাপচার নীতি অবশ্যই AudioAttributes.ALLOW_CAPTURE_BY_ALL হতে হবে, যা অন্যান্য অ্যাপগুলিকে প্লেব্যাক ক্যাপচার করার অনুমতি দেয়। এটি বিভিন্ন উপায়ে করা যেতে পারে:

যদি এই পূর্বশর্তগুলি পূরণ করা হয়, তাহলে প্লেয়ার দ্বারা তৈরি যেকোনো অডিও ক্যাপচার করা যেতে পারে।

সিস্টেম ক্যাপচার অক্ষম করা হচ্ছে

উপরে বর্ণিত ক্যাপচারের অনুমতি দেওয়া সুরক্ষাগুলি শুধুমাত্র অ্যাপের ক্ষেত্রে প্রযোজ্য। অ্যান্ড্রয়েড সিস্টেমের উপাদানগুলি ডিফল্টরূপে প্লেব্যাক ক্যাপচার করতে পারে। এই উপাদানগুলির অনেকগুলি অ্যান্ড্রয়েড বিক্রেতাদের দ্বারা কাস্টমাইজ করা হয় এবং অ্যাক্সেসিবিলিটি এবং ক্যাপশনিংয়ের মতো বৈশিষ্ট্যগুলি সমর্থন করে। এই কারণে অ্যাপগুলি সিস্টেমকে তাদের প্লেব্যাক ক্যাপচার করার অনুমতি দেওয়ার পরামর্শ দেওয়া হয়। বিরল ক্ষেত্রে যখন আপনি চান না যে সিস্টেমটি আপনার অ্যাপের প্লেব্যাক ক্যাপচার করুক, তখন ক্যাপচার নীতিটি ALLOW_CAPTURE_BY_NONE এ সেট করুন।

রানটাইমে নীতি নির্ধারণ করা হচ্ছে

অ্যাপটি চলাকালীন ক্যাপচার নীতি পরিবর্তন করার জন্য আপনি AudioManager.setAllowedCapturePolicy() কল করতে পারেন। যদি আপনি পদ্ধতিটি কল করার সময় কোনও MediaPlayer বা AudioTrack বাজতে থাকে, তাহলে অডিও প্রভাবিত হয় না। নীতি পরিবর্তন কার্যকর হওয়ার জন্য আপনাকে প্লেয়ার বা ট্র্যাকটি বন্ধ করে পুনরায় খুলতে হবে।

নীতি = ম্যানিফেস্ট + অডিও ম্যানেজার + অডিও অ্যাট্রিবিউটস

যেহেতু ক্যাপচার নীতিটি বিভিন্ন স্থানে নির্দিষ্ট করা যেতে পারে, তাই কার্যকর নীতিটি কীভাবে নির্ধারণ করা হয় তা বোঝা গুরুত্বপূর্ণ। সবচেয়ে সীমাবদ্ধ ক্যাপচার নীতি সর্বদা প্রয়োগ করা হয়। উদাহরণস্বরূপ, যে অ্যাপের ম্যানিফেস্টে setAllowedCapturePolicy="false" থাকে সেগুলি কখনই নন-সিস্টেম অ্যাপগুলিকে তার অডিও ক্যাপচার করার অনুমতি দেবে না, এমনকি যদি AudioManager#setAllowedCapturePolicy ALLOW_CAPTURE_BY_ALL এ সেট করা থাকে। একইভাবে, যদি AudioManager#setAllowedCapturePolicy ALLOW_CAPTURE_BY_ALL এ সেট করা থাকে এবং ম্যানিফেস্ট setAllowedCapturePolicy="true" সেট করে, কিন্তু মিডিয়া প্লেয়ারের AudioAttributes AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM) দিয়ে তৈরি করা হয়, তাহলে এই মিডিয়া প্লেয়ারটি নন-সিস্টেম অ্যাপ দ্বারা ক্যাপচারযোগ্য হবে না।

নিচের সারণীতে ম্যানিফেস্ট অ্যাট্রিবিউটের প্রভাব এবং কার্যকর নীতির সারসংক্ষেপ দেওয়া হয়েছে:

অডিওপ্লেব্যাকক্যাপচারকে অনুমতি দিন সকলকে_ক্যাপচার_করতে_দেও সিস্টেমের মাধ্যমে ক্যাপচার করার অনুমতি দিন কোনওটিতেই_ক্যাপচার_করতে_দেননি
সত্য যেকোনো অ্যাপ শুধুমাত্র সিস্টেম কোন ক্যাপচার নেই
মিথ্যা শুধুমাত্র সিস্টেম শুধুমাত্র সিস্টেম কোন ক্যাপচার নেই