ডিজিটাল রাইটস ম্যানেজমেন্ট

DRM-সুরক্ষিত প্লেব্যাক কাজ করানোর জন্য ExoPlayer Android-এর MediaDrm API ব্যবহার করে। বিভিন্ন কাজ করে এমন DRM স্কিমের জন্য প্রয়োজনীয় ন্যূনতম Android ভার্সন, তার সাথে যেসব স্ট্রিমিং ফর্ম্যাটের জন্য সেগুলি কাজ করে, তা নিম্নলিখিত টেবিলে বর্ণনা করা হয়েছে:

DRM স্কিম Android ভার্সন নম্বর Android API লেভেল কাজ করে এমন ফর্ম্যাট
Widevine "cenc" ৪.৪ 19 DASH, HLS (শুধুমাত্র FMP4)
Widevine "cbcs" ৭.১ 25 DASH, HLS (শুধুমাত্র FMP4)
ClearKey "cenc" ৫.০ 21 DASH
PlayReady SL2000 "cenc" Android TV Android TV DASH, SmoothStreaming, HLS (শুধুমাত্র FMP4)

ExoPlayer-এর মাধ্যমে DRM-সুরক্ষিত কন্টেন্ট চালাতে, মিডিয়া আইটেম তৈরি করার সময় DRM সিস্টেমের UUID উল্লেখ করতে হবে এবং অন্যান্য প্রপার্টিও প্রদান করা যেতে পারে। প্লেয়ার তারপরে DrmSessionManager-এর একটি ডিফল্ট প্রয়োগ তৈরি করতে এইসব প্রপার্টি ব্যবহার করবে, যাকে DefaultDrmSessionManager বলা হয়, যা বেশিরভাগ ব্যবহারের ক্ষেত্রে উপযুক্ত। কিছু ব্যবহারের ক্ষেত্রে, অতিরিক্ত DRM প্রপার্টি প্রয়োজন হতে পারে, যেমনটি নিম্নলিখিত বিভাগে উল্লেখ করা হয়েছে।

কী রোটেশন

রোটেটিং কী সহ স্ট্রিম চালাতে, মিডিয়া আইটেম তৈরি করার সময় true থেকে MediaItem.DrmConfiguration.Builder.setMultiSession পাস করুন।

মাল্টি-কী কন্টেন্ট

মাল্টি-কী কন্টেন্টে একাধিক স্ট্রিম থাকে, যেখানে কিছু স্ট্রিম অন্যদের থেকে আলাদা কী ব্যবহার করে। লাইসেন্স সার্ভার কীভাবে কনফিগার করা হয়েছে তার উপর নির্ভর করে দুইভাবে মাল্টি-কী কন্টেন্ট চালানো যেতে পারে।

কেস ১: লাইসেন্স সার্ভার কন্টেন্টের জন্য সব কী সহ উত্তর দেয়

এই ক্ষেত্রে, লাইসেন্স সার্ভার এমনভাবে কনফিগার করা হয় যে এটি একটি কী-এর জন্য অনুরোধ পেলে, এটি কন্টেন্টের জন্য সমস্ত কী দিয়ে উত্তর দেয়। এই সমস্যাটি ExoPlayer কোনও বিশেষ কনফিগারেশন ছাড়াই সমাধান করে। স্ট্রিমগুলির মধ্যে (যেমন, SD ও HD ভিডিও) অ্যাডাপ্টেশন নির্বিঘ্নে হয়, এমনকি সেগুলি আলাদা আলাদা কী ব্যবহার করলেও।

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

কেস ২: লাইসেন্স সার্ভার শুধুমাত্র অনুরোধ করা কী সহ উত্তর দেয়

এই ক্ষেত্রে, লাইসেন্স সার্ভারকে অনুরোধে উল্লিখিত কী দিয়ে উত্তর দেওয়ার জন্য কনফিগার করা হয়েছে। মিডিয়া আইটেম তৈরি করার সময় true থেকে MediaItem.DrmConfiguration.Builder.setMultiSession-এ পাস করে এই লাইসেন্স সার্ভার কনফিগারেশনের মাধ্যমে একাধিক কী কন্টেন্ট চালানো যায়।

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

অফলাইন কী

মিডিয়া আইটেম তৈরি করার সময় কী সেট আইডি MediaItem.DrmConfiguration.Builder.setKeySetId-এ পাস করে অফলাইন কী সেট লোড করা যেতে পারে। এটি নির্দিষ্ট করা আইডি সহ অফলাইন কী সেটে সেভ করা কী ব্যবহার করে প্লেব্যাক করার অনুমতি দেয়।

পরিষ্কার কন্টেন্টের জন্য DRM সেশন

DrmSessions প্লেসহোল্ডার ব্যবহার করলে ExoPlayer এনক্রিপ্ট করা কন্টেন্ট চালানোর সময় ব্যবহৃত ডিকোডারগুলি পরিষ্কার কন্টেন্টের জন্যও ব্যবহার করতে পারে। মিডিয়াতে এনক্রিপ্ট করা ও এনক্রিপ্ট না করা, দুটি বিভাগই থাকলে, এনক্রিপ্ট করা ও এনক্রিপ্ট না করা বিভাগের মধ্যে ট্রানজিশন হলে, ডিকোডার আবার তৈরি করা এড়াতে, আপনি হয়ত প্লেসহোল্ডার DrmSessions ব্যবহার করতে চাইবেন। মিডিয়া আইটেম তৈরি করার সময় true পাস করে MediaItem.DrmConfiguration.Builder.forceSessionsForAudioAndVideoTracks-এ DrmSessions অডিও ও ভিডিও ট্র্যাকের জন্য প্লেসহোল্ডার ব্যবহার করা যায়।

কাস্টম DrmSessionManager ব্যবহার করা

কোনও অ্যাপ যদি প্লেব্যাকের জন্য ব্যবহৃত DrmSessionManager কাস্টমাইজ করতে চায়, তাহলে সেটি DrmSessionManagerProvider প্রয়োগ করতে এবং এটি MediaSource.Factory-এ পাস করতে পারে, যা প্লেয়ার তৈরি করার সময় ব্যবহার করা হয়। প্রদানকারী প্রতিবার নতুন ম্যানেজার ইনস্ট্যান্স ইনস্ট্যানশিয়েট করবে কিনা তা বেছে নিতে পারে। সবসময় একই ইনস্ট্যান্স ব্যবহার করতে:

Kotlin

val customDrmSessionManager: DrmSessionManager = CustomDrmSessionManager()
// Pass a drm session manager provider to the media source factory.
val mediaSourceFactory =
  DefaultMediaSourceFactory(context).setDrmSessionManagerProvider { customDrmSessionManager }

জাভা

DrmSessionManager customDrmSessionManager = new CustomDrmSessionManager(/* ... */ );
// Pass a drm session manager provider to the media source factory.
MediaSource.Factory mediaSourceFactory =
    new DefaultMediaSourceFactory(context)
        .setDrmSessionManagerProvider(mediaItem -> customDrmSessionManager);

প্লেব্যাক পারফর্ম্যান্স উন্নত করা

Android 6.0 (API লেভেল 23) থেকে শুরু করে Android 11 (API লেভেল 30) সহ যেকোনও ভার্সনে চলে এমন ডিভাইসে DRM-সুরক্ষিত কন্টেন্ট চালানোর সময় ভিডিও স্টাটারিং হলে, আপনি অ্যাসিঙ্ক্রোনাস বাফার কিউইং চালু করার চেষ্টা করতে পারেন।