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