এক্সোপ্লেয়ার DRM-সুরক্ষিত প্লেব্যাক সমর্থন করার জন্য অ্যান্ড্রয়েডের MediaDrm API ব্যবহার করে। বিভিন্ন সমর্থিত DRM স্কিমের জন্য প্রয়োজনীয় ন্যূনতম অ্যান্ড্রয়েড সংস্করণ, এবং যে স্ট্রিমিং ফর্ম্যাটগুলির জন্য তারা সমর্থিত, নিম্নলিখিত টেবিলে বর্ণনা করা হয়েছে:
| ডিআরএম স্কিম | অ্যান্ড্রয়েড ভার্সন নম্বর | অ্যান্ড্রয়েড এপিআই লেভেল | সমর্থিত ফর্ম্যাটগুলি |
|---|---|---|---|
| ওয়াইডভাইন "cenc" | ৪.৪ | ১৯ | ড্যাশ, এইচএলএস (শুধুমাত্র FMP4) |
| ওয়াইডভাইন "সিবিসিএস" | ৭.১ | ২৫ | ড্যাশ, এইচএলএস (শুধুমাত্র FMP4) |
| ক্লিয়ারকি "cenc" | ৫.০ | ২১ | ড্যাশ |
| প্লেরেডি SL2000 "cenc" | অ্যান্ড্রয়েড টিভি | অ্যান্ড্রয়েড টিভি | ড্যাশ, স্মুথস্ট্রিমিং, এইচএলএস (শুধুমাত্র FMP4) |
ExoPlayer-এর সাথে DRM-সুরক্ষিত কন্টেন্ট চালানোর জন্য, মিডিয়া আইটেম তৈরি করার সময় DRM সিস্টেমের UUID নির্দিষ্ট করতে হবে এবং অন্যান্য বৈশিষ্ট্যও প্রদান করা যেতে পারে। এরপর প্লেয়ার এই বৈশিষ্ট্যগুলি ব্যবহার করে DrmSessionManager এর একটি ডিফল্ট বাস্তবায়ন তৈরি করবে, যাকে DefaultDrmSessionManager বলা হয়, যা বেশিরভাগ ব্যবহারের ক্ষেত্রে উপযুক্ত। কিছু ব্যবহারের ক্ষেত্রে, অতিরিক্ত DRM বৈশিষ্ট্য প্রয়োজন হতে পারে, যেমনটি নিম্নলিখিত বিভাগগুলিতে বর্ণিত হয়েছে।
কী ঘূর্ণন
ঘূর্ণায়মান কী দিয়ে স্ট্রিম চালানোর জন্য, মিডিয়া আইটেম তৈরি করার সময় MediaItem.DrmConfiguration.Builder.setMultiSession এ true পাস করুন।
মাল্টি-কি কন্টেন্ট
মাল্টি-কি কন্টেন্টে একাধিক স্ট্রিম থাকে, যেখানে কিছু স্ট্রিম অন্যদের থেকে আলাদা কী ব্যবহার করে। লাইসেন্স সার্ভার কীভাবে কনফিগার করা হয়েছে তার উপর নির্ভর করে মাল্টি-কি কন্টেন্ট দুটি উপায়ের একটিতে চালানো যেতে পারে।
কেস ১: লাইসেন্স সার্ভার কন্টেন্টের জন্য সমস্ত কী দিয়ে সাড়া দেয়
এই ক্ষেত্রে, লাইসেন্স সার্ভারটি এমনভাবে কনফিগার করা হয় যাতে যখন এটি একটি কী-এর জন্য অনুরোধ পায়, তখন এটি কন্টেন্টের জন্য সমস্ত কী-এর সাথে সাড়া দেয়। এই ক্ষেত্রে কোনও বিশেষ কনফিগারেশনের প্রয়োজন ছাড়াই ExoPlayer দ্বারা পরিচালিত হয়। স্ট্রিমগুলির মধ্যে অভিযোজন (যেমন SD এবং HD ভিডিও) নির্বিঘ্নে করা যায়, এমনকি যদি তারা বিভিন্ন কী ব্যবহার করে।
সম্ভব হলে, আমরা আপনার লাইসেন্স সার্ভারকে এইভাবে আচরণ করার জন্য কনফিগার করার পরামর্শ দিচ্ছি। মাল্টিকি কন্টেন্ট প্লেব্যাক সমর্থন করার জন্য এটি সবচেয়ে কার্যকর এবং শক্তিশালী উপায়, কারণ এতে ক্লায়েন্টকে বিভিন্ন স্ট্রিম অ্যাক্সেস করার জন্য একাধিক লাইসেন্স অনুরোধ করতে হয় না।
কেস ২: লাইসেন্স সার্ভার শুধুমাত্র অনুরোধকৃত কী দিয়ে সাড়া দেয়
এই ক্ষেত্রে, লাইসেন্স সার্ভারটি কেবল অনুরোধে উল্লেখিত কী দিয়ে সাড়া দেওয়ার জন্য কনফিগার করা হয়েছে। মিডিয়া আইটেম তৈরি করার সময় MediaItem.DrmConfiguration.Builder.setMultiSession এ true পাস করে এই লাইসেন্স সার্ভার কনফিগারেশনের মাধ্যমে মাল্টি-কি কন্টেন্ট চালানো যেতে পারে।
আমরা আপনার লাইসেন্স সার্ভারকে এইভাবে কনফিগার করার পরামর্শ দিচ্ছি না। মাল্টি-কি কন্টেন্ট চালানোর জন্য অতিরিক্ত লাইসেন্স অনুরোধের প্রয়োজন হয়, যা উপরে বর্ণিত বিকল্পের তুলনায় কম দক্ষ এবং শক্তিশালী।
অফলাইন কী
মিডিয়া আইটেম তৈরি করার সময় কী সেট আইডিটি MediaItem.DrmConfiguration.Builder.setKeySetId এ পাস করে একটি অফলাইন কী সেট লোড করা যেতে পারে। এটি নির্দিষ্ট আইডি সহ অফলাইন কী সেটে সংরক্ষিত কীগুলি ব্যবহার করে প্লেব্যাকের অনুমতি দেয়।
স্পষ্ট কন্টেন্টের জন্য DRM সেশন
DrmSessions প্লেসহোল্ডার ব্যবহারের ফলে ExoPlayer এনক্রিপ্ট করা কন্টেন্ট চালানোর সময় যে ডিকোডার ব্যবহার করে তা স্পষ্ট কন্টেন্টের জন্য একই ডিকোডার ব্যবহার করতে পারে। যখন মিডিয়াতে স্পষ্ট এবং এনক্রিপ্ট করা উভয় বিভাগ থাকে, তখন স্পষ্ট এবং এনক্রিপ্ট করা বিভাগের মধ্যে পরিবর্তনের সময় ডিকোডার পুনরায় তৈরি এড়াতে আপনি প্লেসহোল্ডার DrmSessions ব্যবহার করতে পারেন। মিডিয়া আইটেম তৈরি করার সময় MediaItem.DrmConfiguration.Builder.forceSessionsForAudioAndVideoTracks এ true পাস করে অডিও এবং ভিডিও ট্র্যাকের জন্য প্লেসহোল্ডার DrmSessions ব্যবহার সক্ষম করা যেতে পারে।
একটি কাস্টম 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);
প্লেব্যাক কর্মক্ষমতা উন্নত করা হচ্ছে
যদি আপনি এমন কোনও ডিভাইসে DRM-সুরক্ষিত কন্টেন্ট চালানোর সময় ভিডিও তোতলানোর অভিজ্ঞতা পান যা Android 6.0 (API লেভেল 23) থেকে Android 11 (API লেভেল 30) পর্যন্ত Android এর যেকোনো সংস্করণে চলছে, তাহলে আপনি অ্যাসিঙ্ক্রোনাস বাফার কিউয়িং সক্ষম করার চেষ্টা করতে পারেন।