এই নথিটি সারিবদ্ধ এবং DRM ইন্টিগ্রেশন সমর্থনের একটি ওভারভিউ প্রদান করে।
DRM বর্ধিতকরণ
ExoPlayer কাস্ট ডেমো একটি রিসিভার অ্যাপ্লিকেশনে ExoPlayer-এর MediaInfo
ব্যবহার করে DRM কনফিগারেশন পাস করার একটি কাঠামোগত উপায় ব্যবহার করার জন্য আপডেট করা হয়েছে। কাস্ট নমুনাটি একটি ডেমো রিসিভারও ব্যবহার করে যা এই ওভারভিউতে একই কোড অন্তর্ভুক্ত করে, যা আপনাকে DRM সমর্থন পরীক্ষা করার অনুমতি দেয়। যাইহোক, আপনি যদি DRM সুরক্ষিত সামগ্রী কাস্ট করতে চান তবে আপনার নিজের ওয়েব রিসিভার তৈরি এবং হোস্ট করা উচিত।
শুরু করার আগে, Google Cast এবং ExoPlayer- এ DRM সমর্থনের ডকুমেন্টেশনের সাথে নিজেকে পরিচিত করা সহায়ক হবে। এই ওভারভিউ আপনাকে দেখাবে কিভাবে ExoPlayer DRM কনফিগারেশন একটি ওয়েব রিসিভারে ওয়্যার-আপ করতে হয়। এক্সোপ্লেয়ারে কীভাবে ডিআরএম ব্যবহার করবেন সে সম্পর্কে তথ্যের জন্য, অফিসিয়াল এক্সোপ্লেয়ার ওয়েবসাইট দেখুন।
ডিআরএম কনফিগারেশন প্রদান করা হচ্ছে
ExoPlayer ডেমো অ্যাপটিতে নমুনা কোড রয়েছে যা দেখায় কিভাবে একটি MediaItem এর অংশ হিসাবে DRM কনফিগারেশন প্রদান করতে হয়। আপনি যে চারটি বিকল্প কনফিগার করতে পারেন তা হল:
- হেডার - হেডারগুলির একটি অভিধান যা DRM লাইসেন্স পুনরুদ্ধার করার জন্য HTTPS অনুরোধে প্রয়োগ করা হয়।
- লাইসেন্স URL - লাইসেন্স অর্জন করতে ব্যবহৃত URL।
- সুরক্ষা ব্যবস্থা - ডিআরএম সুরক্ষা স্কিম যা সামগ্রী রক্ষা করতে ব্যবহৃত হয়, উদাহরণস্বরূপ, ওয়াইডিভাইন।
ExoPlayer-এ আপনি যে DRM কনফিগারেশন প্রদান করেন তা লোড অনুরোধের অংশ হিসেবে MediaInformation
অবজেক্টের customData
একটি সম্পত্তি হিসাবে আপনার রিসিভার অ্যাপ্লিকেশনে পাঠানো হয়। ডিফল্টরূপে, এই বৈশিষ্ট্যটিকে বলা হয় exoPlayerConfig
, যা নিম্নলিখিত সংজ্ঞার সাথে মেলে।
/**
* Extended configuration settings for ExoPlayer.
*/
ExoPlayerConfig class {
constructor() {
/**
* Dictionary of headers to apply to the license request.
* @type {!Object|undefined}
*/
this.headers;
/**
* The URL for your DRM server.
* @type {string|undefined}
*/
this.licenseUrl;
/**
* Preferred protection system to use for decrypting content.
* @type {!cast.framework.ContentProtection|undefined}
*/
this.protectionSystem;
/**
* Indicates whether CORS Access-Control requests should be made using
* credentials such as cookies or authorization headers.
*
* If withCredentials is set to true then Access-Control-Allow-Origin cannot
* be set to '*'.
* @type {boolean|undefined}
*/
this.withCredentials;
}
}
প্রাথমিক সেটআপ
আপনি যে DRM সমাধানটি ব্যবহার করেন তার উপর নির্ভর করে, আপনাকে একটি licenseRequestHandler
এবং একটি mediaPlaybackInfoHandler
কনফিগার করতে হতে পারে। licenseRequestHandler
আপনাকে কাস্টমাইজ করতে দেয় কিভাবে CAF আপনার লাইসেন্স কী সার্ভার থেকে লাইসেন্সের অনুরোধ করে। mediaPlaybackInfoHandler
আপনাকে প্রতি মিডিয়া আইটেমের ভিত্তিতে PlaybackConfig
সংশোধন করতে দেয়, উদাহরণস্বরূপ, প্রতিটি বিষয়বস্তুর একটি আলাদা লাইসেন্স সার্ভার URL ব্যবহার করতে হয়।
প্রতিটি লোড রিকোয়েস্ট অবজেক্ট থেকে ExoPlayerConfig
এর একটি কপি ক্যাপচার করতে, আপনার ওয়েব রিসিভার SDK অ্যাপ্লিকেশনে একটি লোড রিকোয়েস্ট ইন্টারসেপ্টর তৈরি করুন।
প্রথম ধাপ হল আপনার কাস্ট অ্যাপ্লিকেশন শুরু করার আগে আপনার হ্যান্ডলারদের নিবন্ধন করা।
const context = cast.framework.CastReceiverContext.getInstance();
const playbackConfig = new cast.framework.PlaybackConfig();
playbackConfig.licenseRequestHandler =
licenseRequestHandler;
context.getPlayerManager().setMediaPlaybackInfoHandler(
mediaPlaybackInfoHandler);
context.getPlayerManager().setMessageInterceptor(
cast.framework.messages.MessageType.LOAD,
loadInterceptor);
// starts the Cast application
context.start({playbackConfig: playbackConfig});
লোড অনুরোধ ইন্টারসেপ্টর
লোড রিকোয়েস্ট ইন্টারসেপ্টর হল একটি কলব্যাক যা আপনাকে CAF একটি মিডিয়া আইটেম লোড করার চেষ্টা করার আগে একটি কাস্ট লোড অনুরোধ দেখতে এবং সংশোধন করতে দেয়৷ গুরুত্বপূর্ণভাবে, এটি লাইসেন্স অনুরোধ হ্যান্ডার এবং মিডিয়া প্লেব্যাক তথ্য হ্যান্ডলারের আগে বলা হয়।
লোড রিকোয়েস্ট ইন্টারসেপ্টরকে একটি LoadRequestData
অবজেক্ট পাস করা হয়েছে যাতে Exo Player Config রয়েছে যা আপনার অ্যাপের মাধ্যমে পাঠানো হয়েছে। আপনি আপনার লাইসেন্স অনুরোধ হ্যান্ডলার এবং মিডিয়া প্লেব্যাক তথ্য হ্যান্ডলারে ব্যবহারের জন্য এই বস্তুটিকে একটি গ্লোবাল ভেরিয়েবল হিসাবে সংরক্ষণ করতে পারেন।
loadInterceptor(loadRequestData) {
// not every load request will have a customData object
if (loadRequestData.media && loadRequestData.media.customData &&
loadRequestData.media.customData['exoPlayerConfig']) {
// exoPlayerConfig is a global variable here
exoPlayerConfig =
loadRequestData.media.customData['exoPlayerConfig'];
}
// you must return the loadRequestData object
return loadRequestData;
}
লাইসেন্স অনুরোধ হ্যান্ডলার
লাইসেন্স অনুরোধ হ্যান্ডলার আপনাকে HTTPS অনুরোধ ওয়েব রিসিভার আপনার লাইসেন্স সার্ভারে কাস্টমাইজ করতে দেয়। হ্যান্ডলারকে একটি NetworkRequestInfo
অবজেক্ট পাস করা হয়, যা আপনি HTTP হেডার যোগ করতে, কুকি অন্তর্ভুক্ত করতে বা এমনকি URL পরিবর্তন করতে ব্যবহার করতে পারেন। হ্যান্ডলারের এই বস্তুটি ফেরত দেওয়া উচিত।
উদাহরণস্বরূপ, যদি আপনার লাইসেন্সের অনুরোধে কাস্টম শিরোনাম যোগ করার প্রয়োজন হয়, তাহলে আপনি এর অনুরূপ একটি লাইসেন্স অনুরোধ হ্যান্ডলার তৈরি করতে পারেন:
licenseRequestHandler(networkRequestInfo) {
if (!exoPlayerConfig) {
return networkRequestInfo;
}
networkRequestInfo.headers =
exoPlayerConfig.headers ? exoPlayerConfig.headers : undefined;
return networkRequestInfo;
}
মিডিয়া প্লেব্যাক তথ্য হ্যান্ডলার
মিডিয়া প্লেব্যাক তথ্য হ্যান্ডলার আপনাকে প্রতি মিডিয়া আইটেমের ভিত্তিতে আপনার প্লেব্যাক কনফিগারেশনে পরিবর্তন করতে দেয়। হ্যান্ডলারকে একটি LoadRequestData
এবং একটি PlaybackConfig
পাস করা হয়েছে, আপনার একটি প্লেব্যাক কনফিগারেশন ফেরত দেওয়া উচিত৷ আপনার কাস্ট করা প্রতিটি আইটেম লোড হওয়ার আগে মিডিয়া প্লেব্যাক তথ্য হ্যান্ডলারকে কল করা হবে। আপনি যদি প্রতি-বিষয়বস্তুর লাইসেন্স ইউআরএল থাকে, লোড করার আগে সেগুলি এবং সুরক্ষা ব্যবস্থা পরিবর্তন করতে পারেন।
mediaPlaybackInfoHandler(loadRequest, playbackConfig) {
if (!exoPlayerConfig) {
return;
}
playbackConfig.licenseUrl = exoPlayerConfig.licenseUrl ?
exoPlayerConfig.licenseUrl :
undefined;
playbackConfig.protectionSystem = exoPlayerConfig.protectionSystem ?
exoPlayerConfig.protectionSystem :
undefined;
return playbackConfig;
}
আরও সম্পদ
প্রতিটি DRM বাস্তবায়ন কাস্টম এবং এই কোড শুধুমাত্র একটি প্রদর্শন হিসাবে প্রদান করা হয়. আপনি আপনার ExoPlayer এবং Cast অ্যাপ্লিকেশনগুলিতে সঠিকভাবে DRM প্রয়োগ করেছেন তা নিশ্চিত করতে আপনার DRM প্রদানকারীর সাথে পরামর্শ করা উচিত।
ExoPlayer-এর ওয়েবসাইটে আপ-টু-ডেট ডকুমেন্টেশন এবং ঘোষণা রয়েছে। ExoPlayer এবং এর কাস্ট ইন্টিগ্রেশনের সমস্যাগুলি ExoPlayer-এর GitHub সংগ্রহস্থলে রিপোর্ট করা যেতে পারে।