মিডিয়াপ্লেয়ার এবং ডিজিটাল রাইটস ম্যানেজমেন্ট (ডিআরএম) এর সাথে কাজ করুন

অ্যান্ড্রয়েড 8.0 (এপিআই লেভেল 26) দিয়ে শুরু করে, MediaPlayer এমন API অন্তর্ভুক্ত রয়েছে যা DRM-সুরক্ষিত উপাদানের প্লেব্যাক সমর্থন করে। MediaPlayer DRM APIগুলি MediaDrm দ্বারা প্রদত্ত নিম্ন-স্তরের APIগুলির অনুরূপ, কিন্তু তারা উচ্চ স্তরে কাজ করে এবং অন্তর্নিহিত এক্সট্র্যাক্টর, DRM এবং ক্রিপ্টো অবজেক্টগুলিকে প্রকাশ করে না।

যদিও MediaPlayer DRM API MediaDrm এর সম্পূর্ণ কার্যকারিতা প্রদান করে না, এটি সবচেয়ে সাধারণ ব্যবহারের ক্ষেত্রে সমর্থন করে। বর্তমান বাস্তবায়ন নিম্নলিখিত বিষয়বস্তুর প্রকারগুলি পরিচালনা করতে পারে:

  • ওয়াইডিভাইন-সুরক্ষিত স্থানীয় মিডিয়া ফাইল
  • ওয়াইডিভাইন-সুরক্ষিত রিমোট বা স্ট্রিমিং মিডিয়া ফাইল

নিম্নলিখিত কোড স্নিপেট দেখায় কিভাবে একটি সিঙ্ক্রোনাস বাস্তবায়নে নতুন DRM MediaPlayer পদ্ধতিগুলি ব্যবহার করতে হয়।

DRM-নিয়ন্ত্রিত মিডিয়া পরিচালনা করতে, আপনাকে MediaPlayer কলের স্বাভাবিক প্রবাহের পাশাপাশি নতুন পদ্ধতিগুলি অন্তর্ভুক্ত করতে হবে, যেমন এই উদাহরণে দেখানো হয়েছে:

কোটলিন

mediaPlayer?.apply {
    setDataSource()
    setOnDrmConfigHelper() // optional, for custom configuration
    prepare()
    drmInfo?.also {
        prepareDrm()
        getKeyRequest()
        provideKeyResponse()
    }

    // MediaPlayer is now ready to use
    start()
    // ...play/pause/resume...
    stop()
    releaseDrm()
}

জাভা

setDataSource();
setOnDrmConfigHelper(); // optional, for custom configuration
prepare();
if (getDrmInfo() != null) {
  prepareDrm();
  getKeyRequest();
  provideKeyResponse();
}

// MediaPlayer is now ready to use
start();
// ...play/pause/resume...
stop();
releaseDrm();

MediaPlayer অবজেক্টটি আরম্ভ করে শুরু করুন এবং স্বাভাবিকের মতো setDataSource() ব্যবহার করে এর উত্স সেট করুন। তারপর, DRM ব্যবহার করতে, এই পদক্ষেপগুলি সম্পাদন করুন:

  1. আপনি যদি আপনার অ্যাপটি কাস্টম কনফিগারেশন করতে চান, তাহলে একটি OnDrmConfigHelper ইন্টারফেস সংজ্ঞায়িত করুন এবং setOnDrmConfigHelper() ব্যবহার করে প্লেয়ারের সাথে সংযুক্ত করুন।
  2. কল prepare()
  3. getDrmInfo() কল করুন। যদি উৎসে DRM বিষয়বস্তু থাকে, পদ্ধতিটি একটি নন-নাল MediaPlayer.DrmInfo মান প্রদান করে।

যদি MediaPlayer.DrmInfo বিদ্যমান থাকে:

  1. উপলব্ধ UUID এর মানচিত্র পরীক্ষা করুন এবং একটি চয়ন করুন।
  2. prepareDrm() কল করে বর্তমান উৎসের জন্য DRM কনফিগারেশন প্রস্তুত করুন।
    • আপনি যদি একটি OnDrmConfigHelper কলব্যাক তৈরি করেন এবং নিবন্ধিত করেন, তবে এটিকে বলা হয় যখন prepareDrm() চালানো হচ্ছে। এটি আপনাকে DRM সেশন খোলার আগে DRM বৈশিষ্ট্যগুলির কাস্টম কনফিগারেশন করতে দেয়। কলব্যাককে থ্রেডে সিঙ্ক্রোনাসলি বলা হয় যাকে prepareDrm() বলা হয়। DRM বৈশিষ্ট্যগুলি অ্যাক্সেস করতে, getDrmPropertyString() এবং setDrmPropertyString() কল করুন। দীর্ঘ অপারেশন সঞ্চালন এড়িয়ে চলুন.
    • যদি ডিভাইসটি এখনও প্রভিশন করা না থাকে, prepareDrm() ডিভাইসটির প্রভিশন করার জন্য প্রভিশনিং সার্ভারেও অ্যাক্সেস করে। নেটওয়ার্ক সংযোগের উপর নির্ভর করে এটি পরিবর্তনশীল সময় নিতে পারে।
  3. লাইসেন্স সার্ভারে পাঠানোর জন্য একটি অস্বচ্ছ কী অনুরোধ বাইট অ্যারে পেতে, getKeyRequest() কল করুন।
  4. লাইসেন্স সার্ভার থেকে প্রাপ্ত মূল প্রতিক্রিয়া সম্পর্কে DRM ইঞ্জিনকে জানাতে, provideKeyResponse() কল করুন। ফলাফল কী অনুরোধের ধরনের উপর নির্ভর করে:
    • যদি প্রতিক্রিয়াটি একটি অফলাইন কী অনুরোধের জন্য হয়, ফলাফলটি একটি কী-সেট শনাক্তকারী। আপনি একটি নতুন সেশনে কীগুলি পুনরুদ্ধার করতে restoreKeys() এর সাথে এই কী-সেট শনাক্তকারী ব্যবহার করতে পারেন।
    • যদি প্রতিক্রিয়া একটি স্ট্রিমিং বা রিলিজ অনুরোধের জন্য হয়, ফলাফলটি শূন্য।

অসিঙ্ক্রোনাসভাবে DRM প্রস্তুত করুন

ডিফল্টরূপে, prepareDrm() সিঙ্ক্রোনাসভাবে চলে, প্রস্তুতি শেষ না হওয়া পর্যন্ত ব্লক করে। যাইহোক, একটি নতুন ডিভাইসে প্রথম ডিআরএম প্রস্তুতির জন্যও প্রভিশনের প্রয়োজন হতে পারে, যেটি prepareDrm() অভ্যন্তরীণভাবে পরিচালনা করে এবং নেটওয়ার্ক অপারেশন জড়িত থাকার কারণে শেষ হতে কিছুটা সময় লাগতে পারে। আপনি একটি MediaPlayer.OnDrmPreparedListener সংজ্ঞায়িত এবং সেট করার মাধ্যমে prepareDrm() এ ব্লক করা এড়াতে পারেন।

একটি OnDrmPreparedListener সেট করুন। prepareDrm() ব্যাকগ্রাউন্ডে প্রভিশনিং (যদি প্রয়োজন হয়) এবং প্রস্তুতি সম্পাদন করে। বিধান এবং প্রস্তুতি শেষ করার সময়, সিস্টেমটি শ্রোতাকে কল করে। কলিং সিকোয়েন্স বা শ্রোতা যে থ্রেডে চলে সে সম্পর্কে কোনো অনুমান করবেন না (যদি না আপনি একটি হ্যান্ডলার থ্রেড দিয়ে শ্রোতাকে নিবন্ধন করেন)। সিস্টেম prepareDrm() রিটার্নের আগে বা পরে শ্রোতাকে কল করতে পারে।

অসিঙ্ক্রোনাসভাবে DRM সেট আপ করুন

আপনি DRM প্রস্তুতির জন্য MediaPlayer.OnDrmInfoListener এবং প্লেয়ার শুরু করতে MediaPlayer.OnDrmPreparedListener তৈরি এবং নিবন্ধন করে অ্যাসিঙ্ক্রোনাসভাবে DRM শুরু করতে পারেন। তারা prepareAsync() এর সাথে একত্রে কাজ করে, যেমন এই উদাহরণে দেখানো হয়েছে:

কোটলিন

setOnPreparedListener()
setOnDrmInfoListener()
setDataSource()
prepareAsync()
// ...

// If the data source content is protected you receive a call to the onDrmInfo() callback.
override fun onDrmInfo(mediaPlayer: MediaPlayer, drmInfo: MediaPlayer.DrmInfo) {
    mediaPlayer.apply {
        prepareDrm()
        getKeyRequest()
        provideKeyResponse()
    }
}

// When prepareAsync() finishes, you receive a call to the onPrepared() callback.
// If there is a DRM, onDrmInfo() sets it up before executing this callback,
// so you can start the player.
override fun onPrepared(mediaPlayer: MediaPlayer) {
    mediaPlayer.start()
}

জাভা

setOnPreparedListener();
setOnDrmInfoListener();
setDataSource();
prepareAsync();
// ...

// If the data source content is protected you receive a call to the onDrmInfo() callback.
onDrmInfo() {
  prepareDrm();
  getKeyRequest();
  provideKeyResponse();
}

// When prepareAsync() finishes, you receive a call to the onPrepared() callback.
// If there is a DRM, onDrmInfo() sets it up before executing this callback,
// so you can start the player.
onPrepared() {

start();
}

এনক্রিপ্ট করা মিডিয়া পরিচালনা করুন

Android 8.0 (API লেভেল 26) দিয়ে শুরু করে MediaPlayer প্রাথমিক স্ট্রীম প্রকার H.264, এবং AAC-এর জন্য কমন এনক্রিপশন স্কিম (CENC) এবং HLS স্যাম্পল-লেভেল এনক্রিপ্টেড মিডিয়া (METHOD=SAMPLE-AES) ডিক্রিপ্ট করতে পারে। সম্পূর্ণ-সেগমেন্ট এনক্রিপ্ট করা মিডিয়া (METHOD=AES-128) পূর্বে সমর্থিত ছিল।

আরও জানুন

Jetpack Media3 হল আপনার অ্যাপে মিডিয়া প্লেব্যাকের জন্য প্রস্তাবিত সমাধান। এটি সম্পর্কে আরও পড়ুন .

এই পৃষ্ঠাগুলি অডিও এবং ভিডিও রেকর্ডিং, সঞ্চয় করা এবং প্লে ব্যাক করা সম্পর্কিত বিষয়গুলি কভার করে: