প্লেলিস্ট API MediaItem ইনস্ট্যান্সের উপর ভিত্তি করে তৈরি হয়, যা MediaItem.Builder ব্যবহার করে
সহজেই তৈরি করা যায়। প্লেয়ারের মধ্যে, MediaItem-কে MediaSource.Factory-এর মাধ্যমে
খেলার উপযুক্ত MediaSource-এ কনভার্ট করা হয়। কাস্টম কনফিগারেশন
ছাড়া, এই কনভার্সন DefaultMediaSourceFactory দ্বারা করা হয়, যা
মিডিয়া আইটেমের প্রপার্টি অনুযায়ী জটিল মিডিয়া সোর্স
তৈরি করতে পারে। মিডিয়া আইটেমে সেট করা যায় এমন কিছু প্রপার্টির ব্যাপারে
নিচে বলা হল।
সাধারণ মিডিয়া আইটেম
শুধুমাত্র স্ট্রিম URI নিয়ে গঠিত মিডিয়া আইটেম fromUri
কনভেনিয়েন্স পদ্ধতির মাধ্যমে তৈরি করা যেতে পারে:
Kotlin
val mediaItem = MediaItem.fromUri(videoUri)
জাভা
MediaItem mediaItem = MediaItem.fromUri(videoUri);
অন্যান্য সব ক্ষেত্রে, MediaItem.Builder ব্যবহার করা যেতে পারে। নিচের উদাহরণে, একটি আইডি ও কিছু অ্যাটাচ করা মেটাডেটা সহ
মিডিয়া আইটেম তৈরি করা হয়েছে:
Kotlin
val mediaItem = MediaItem.Builder().setMediaId(mediaId).setTag(myAppData).setUri(videoUri).build()
জাভা
MediaItem mediaItem = new MediaItem.Builder().setMediaId(mediaId).setTag(myAppData).setUri(videoUri).build();
প্লেলিস্ট ট্রানজিশন হওয়ার সময় আপনার অ্যাপের UI আপডেট করার জন্য মেটাডেটা অ্যাটাচ করা কাজে লাগতে পারে।
ছবি
ছবি প্লেব্যাক করার জন্য মিডিয়া আইটেমে একটি সময়সীমা থাকতে হবে, যাতে প্লেব্যাকের সময় ছবিটি কতক্ষণ দেখানো হবে তা নির্দিষ্ট করা যায়। মোশন ফটো এবং ইমেজ লোডিং লাইব্রেরি (যেমন, Glide) সম্পর্কে আরও জানতে ছবি নির্দেশিকা পৃষ্ঠা দেখুন।
Kotlin
val mediaItem = MediaItem.Builder().setUri(imageUri).setImageDurationMs(3000).build()
জাভা
MediaItem mediaItem = new MediaItem.Builder().setUri(imageUri).setImageDurationMs(3_000).build();
অ্যাডাপ্টিভ মিডিয়ার জন্য নন-স্ট্যান্ডার্ড ফাইল এক্সটেনশন
DASH, HLS এবং SmoothStreaming-এর জন্য ExoPlayer অ্যাডাপ্টিভ মিডিয়া সোর্স প্রদান করে। এই ধরনের অ্যাডাপ্টিভ মিডিয়া আইটেমের URI স্ট্যান্ডার্ড ফাইল এক্সটেনশন দিয়ে শেষ হলে, সংশ্লিষ্ট মিডিয়া সোর্স অটোমেটিক তৈরি হয়ে যায়। URI-তে কোনও নন-স্ট্যান্ডার্ড এক্সটেনশন বা কোনও এক্সটেনশন না থাকলে, মিডিয়া আইটেমের ধরন বোঝাতে MIME টাইপ স্পষ্টভাবে সেট করা যেতে পারে:
Kotlin
val mediaItem = MediaItem.Builder().setUri(hlsUri).setMimeType(MimeTypes.APPLICATION_M3U8).build()
জাভা
MediaItem mediaItem = new MediaItem.Builder().setUri(hlsUri).setMimeType(MimeTypes.APPLICATION_M3U8).build();
প্রোগ্রেসিভ মিডিয়া স্ট্রিমের জন্য MIME-এর ধরন প্রয়োজন হয় না।
সুরক্ষিত সামগ্রী
সুরক্ষিত কন্টেন্টের জন্য, মিডিয়া আইটেমের DRM প্রপার্টি সেট করা উচিত। UUID প্রয়োজনীয়, বাকি সব প্রপার্টি ঐচ্ছিক।
Widevine DRM-এর মাধ্যমে সুরক্ষিত কোনও আইটেম চালানোর জন্য কনফিগারেশনের একটি উদাহরণ যেখানে লাইসেন্স URI সরাসরি মিডিয়াতে (যেমন, DASH প্লেলিস্টে) উপলভ্য নেই এবং একাধিক সেশন প্রয়োজন (যেমন, কী রোটেশনের কারণে):
Kotlin
val mediaItem = MediaItem.Builder() .setUri(videoUri) .setDrmConfiguration( MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID) .setLicenseUri(licenseUri) .setMultiSession(true) .setLicenseRequestHeaders(httpRequestHeaders) .build() ) .build()
জাভা
MediaItem mediaItem = new MediaItem.Builder() .setUri(videoUri) .setDrmConfiguration( new MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID) .setLicenseUri(licenseUri) .setMultiSession(true) .setLicenseRequestHeaders(httpRequestHeaders) .build()) .build();
প্লেয়ারের
মধ্যে, DefaultMediaSourceFactory একটি DrmSessionManager পাওয়ার জন্য এইসব প্রপার্টি
DrmSessionManagerProvider-এ পাস করবে, যা তারপরে তৈরি করা MediaSource-এ
ইনজেক্ট করা হবে। আপনার প্রয়োজন অনুযায়ী DRM আচরণকে
আরও কাস্টমাইজ করা
যায়।
সাবটাইটেল ট্র্যাক সাইডলোড করা
সাবটাইটেল ট্র্যাক সাইডলোড করতে, মিডিয়া আইটেম তৈরি করার সময় MediaItem.Subtitle ইনস্ট্যান্স যোগ করা যেতে পারে:
Kotlin
val subtitle = MediaItem.SubtitleConfiguration.Builder(subtitleUri) .setMimeType(mimeType) // The correct MIME type (required). .setLanguage(language) // The subtitle language (optional). .setSelectionFlags(selectionFlags) // Selection flags for the track (optional). .build() val mediaItem = MediaItem.Builder().setUri(videoUri).setSubtitleConfigurations(listOf(subtitle)).build()
জাভা
MediaItem.SubtitleConfiguration subtitle = new MediaItem.SubtitleConfiguration.Builder(subtitleUri) .setMimeType(mimeType) // The correct MIME type (required). .setLanguage(language) // The subtitle language (optional). .setSelectionFlags(selectionFlags) // Selection flags for the track (optional). .build(); MediaItem mediaItem = new MediaItem.Builder() .setUri(videoUri) .setSubtitleConfigurations(ImmutableList.of(subtitle)) .build();
অভ্যন্তরীণভাবে, DefaultMediaSourceFactory প্রতিটি সাবটাইটেল ট্র্যাকের জন্য SingleSampleMediaSource-এর সাথে কন্টেন্ট মিডিয়া সোর্সকে একত্রিত করতে MergingMediaSource ব্যবহার করবে।
DefaultMediaSourceFactory মাল্টি-পিরিয়ড DASH-এর জন্য সাইডলোডিং সাবটাইটেল সাপোর্ট করে না।
মিডিয়া স্ট্রিম ক্লিপ করা
কোনও মিডিয়া আইটেমের মাধ্যমে রেফার করা কন্টেন্ট ক্লিপ করতে, কাস্টম শুরু ও শেষ পজিশন সেট করুন:
Kotlin
val mediaItem = MediaItem.Builder() .setUri(videoUri) .setClippingConfiguration( MediaItem.ClippingConfiguration.Builder() .setStartPositionMs(startPositionMs) .setEndPositionMs(endPositionMs) .build() ) .build()
জাভা
MediaItem mediaItem = new MediaItem.Builder() .setUri(videoUri) .setClippingConfiguration( new ClippingConfiguration.Builder() .setStartPositionMs(startPositionMs) .setEndPositionMs(endPositionMs) .build()) .build();
ইন্টার্নালি, DefaultMediaSourceFactory কন্টেন্ট মিডিয়া সোর্সকে
র্যাপ করতে ClippingMediaSource ব্যবহার করবে। আরও ক্লিপিং প্রপার্টি আছে। আরও বিবরণের জন্য
MediaItem.Builder Javadoc দেখুন।
বিজ্ঞাপন যোগ করা
বিজ্ঞাপন যোগ করতে, মিডিয়া আইটেমের বিজ্ঞাপন ট্যাগ URI প্রপার্টি সেট করতে হবে:
Kotlin
val mediaItem = MediaItem.Builder() .setUri(videoUri) .setAdsConfiguration(MediaItem.AdsConfiguration.Builder(adTagUri).build()) .build()
জাভা
MediaItem mediaItem = new MediaItem.Builder() .setUri(videoUri) .setAdsConfiguration(new MediaItem.AdsConfiguration.Builder(adTagUri).build()) .build();
অভ্যন্তরীণভাবে, DefaultMediaSourceFactory বিজ্ঞাপন ট্যাগ দ্বারা নির্ধারিত বিজ্ঞাপন যোগ করতে কন্টেন্ট মিডিয়া সোর্সকে
AdsMediaSource-এর মধ্যে র্যাপ করবে। এটি কাজ করার জন্য, প্লেয়ারের DefaultMediaSourceFactory
কনফিগারেশনও সেই অনুযায়ী হতে হবে।