ডিজিটাল অধিকার ব্যাবস্থাপনা

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

ডিআরএম স্কিম অ্যান্ড্রয়েড সংস্করণ নম্বর অ্যান্ড্রয়েড এপিআই স্তর সমর্থিত ফরম্যাট
ওয়াইডিভাইন "সেনসি" 4.4 19 DASH, HLS (শুধু FMP4)
ওয়াইডিভাইন "সিবিসিএস" 7.1 25 DASH, HLS (শুধু FMP4)
ClearKey "cenc" 5.0 21 ড্যাশ
PlayReady SL2000 "cenc" অ্যান্ড্রয়েড টিভি অ্যান্ড্রয়েড টিভি DASH, স্মুথস্ট্রিমিং, HLS (শুধুমাত্র FMP4)

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

কী ঘূর্ণন

ঘূর্ণায়মান কীগুলির সাথে স্ট্রিমগুলি চালানোর জন্য, মিডিয়া আইটেম তৈরি করার সময় MediaItem.DrmConfiguration.Builder.setMultiSessiontrue পাস করুন৷

বহু-কী বিষয়বস্তু

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

কেস 1: লাইসেন্স সার্ভার সামগ্রীর জন্য সমস্ত কী সহ প্রতিক্রিয়া জানায়৷

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

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

কেস 2: লাইসেন্স সার্ভার শুধুমাত্র অনুরোধ করা কী দিয়ে সাড়া দেয়

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

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

অফলাইন কী

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

পরিষ্কার বিষয়বস্তুর জন্য DRM সেশন

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

একটি কাস্টম DrmSessionManager ব্যবহার করে

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

কোটলিন

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-সুরক্ষিত সামগ্রী চালানোর সময় আপনি যদি ভিডিও তোতলান অনুভব করেন, তাহলে আপনি অ্যাসিঙ্ক্রোনাস বাফার সারি চালু করার চেষ্টা করতে পারেন।