প্লেলিস্ট API টি MediaItem
দৃষ্টান্তের উপর ভিত্তি করে, যা MediaItem.Builder
ব্যবহার করে সুবিধাজনকভাবে তৈরি করা যেতে পারে। প্লেয়ারের ভিতরে, একটি MediaSource.Factory
দ্বারা একটি MediaItem
একটি প্লেযোগ্য MediaSource
রূপান্তরিত হয়। কাস্টম কনফিগারেশন ছাড়া, এই রূপান্তরটি একটি DefaultMediaSourceFactory
দ্বারা সঞ্চালিত হয়, যা মিডিয়া আইটেমের বৈশিষ্ট্যগুলির সাথে সম্পর্কিত জটিল মিডিয়া উত্সগুলি তৈরি করতে সক্ষম৷ মিডিয়া আইটেমগুলিতে সেট করা যেতে পারে এমন কিছু বৈশিষ্ট্য নীচে বর্ণিত হয়েছে।
সহজ মিডিয়া আইটেম
শুধুমাত্র স্ট্রীম URI সমন্বিত একটি মিডিয়া আইটেম fromUri
সুবিধার পদ্ধতিতে তৈরি করা যেতে পারে:
কোটলিন
val mediaItem = MediaItem.fromUri(videoUri)
জাভা
MediaItem mediaItem = MediaItem.fromUri(videoUri);
অন্য সব ক্ষেত্রে, একটি MediaItem.Builder
ব্যবহার করা যেতে পারে। নিম্নলিখিত উদাহরণে, একটি মিডিয়া আইটেম একটি ID এবং কিছু সংযুক্ত মেটাডেটা দিয়ে তৈরি করা হয়েছে:
কোটলিন
val mediaItem = MediaItem.Builder().setMediaId(mediaId).setTag(myAppData).setUri(videoUri).build()
জাভা
MediaItem mediaItem = new MediaItem.Builder().setMediaId(mediaId).setTag(myAppData).setUri(videoUri).build();
প্লেলিস্টের রূপান্তর ঘটলে আপনার অ্যাপের UI আপডেট করার জন্য মেটাডেটা সংযুক্ত করা কার্যকর হতে পারে।
ছবি
ছবির প্লেব্যাকের জন্য মিডিয়া আইটেমে একটি সময়কাল প্রয়োজন যাতে প্লেব্যাকের সময় ছবিটি কতক্ষণ দেখানো উচিত তা নির্দিষ্ট করে৷ মোশন ফটো এবং ইমেজ লোডিং লাইব্রেরি (উদাহরণস্বরূপ, গ্লাইড) সম্পর্কে আরও তথ্যের জন্য চিত্র নির্দেশিকা পৃষ্ঠাটি দেখুন।
কোটলিন
val mediaItem = MediaItem.Builder().setUri(imageUri).setImageDurationMs(3000).build()
জাভা
MediaItem mediaItem = new MediaItem.Builder().setUri(imageUri).setImageDurationMs(3_000).build();
অভিযোজিত মিডিয়ার জন্য অ-মানক ফাইল এক্সটেনশন
ExoPlayer DASH, HLS, এবং স্মুথস্ট্রিমিংয়ের জন্য অভিযোজিত মিডিয়া উত্স সরবরাহ করে। যদি এই ধরনের একটি অভিযোজিত মিডিয়া আইটেমের URI একটি স্ট্যান্ডার্ড ফাইল এক্সটেনশনের সাথে শেষ হয়, তাহলে সংশ্লিষ্ট মিডিয়া উৎস স্বয়ংক্রিয়ভাবে তৈরি হয়। যদি URI-এর একটি অ-মানক এক্সটেনশন থাকে বা একেবারেই কোনো এক্সটেনশন না থাকে, তাহলে মিডিয়া আইটেমের ধরন নির্দেশ করতে MIME প্রকারটি স্পষ্টভাবে সেট করা যেতে পারে:
কোটলিন
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 প্লেলিস্টে) এবং একাধিক সেশনের প্রয়োজন হয় (যেমন কী ঘূর্ণনের কারণে):
কোটলিন
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
এই বৈশিষ্ট্যগুলিকে একটি DrmSessionManagerProvider
প্রদানকারীকে একটি DrmSessionManager
পেতে পাঠাবে, যা তৈরি করা MediaSource
ইনজেকশন দেওয়া হয়। DRM আচরণ আপনার প্রয়োজন অনুযায়ী আরও কাস্টমাইজ করা যেতে পারে।
সাইডলোডিং সাবটাইটেল ট্র্যাক
সাবটাইটেল ট্র্যাক সাইডলোড করতে, মিডিয়া আইটেম তৈরি করার সময় MediaItem.Subtitle
উদাহরণ যোগ করা যেতে পারে:
কোটলিন
val subtitle = 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-এর জন্য সাইডলোডিং সাবটাইটেল সমর্থন করে না।
একটি মিডিয়া স্ট্রিম ক্লিপিং
একটি মিডিয়া আইটেম দ্বারা উল্লেখিত বিষয়বস্তু ক্লিপ করতে, কাস্টম শুরু এবং শেষ অবস্থান সেট করুন:
কোটলিন
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 সম্পত্তি সেট করা উচিত:
কোটলিন
val mediaItem = MediaItem.Builder() .setUri(videoUri) .setAdsConfiguration(MediaItem.AdsConfiguration.Builder(adTagUri).build())
জাভা
MediaItem mediaItem = new MediaItem.Builder() .setUri(videoUri) .setAdsConfiguration(new MediaItem.AdsConfiguration.Builder(adTagUri).build()) .build();
অভ্যন্তরীণভাবে, DefaultMediaSourceFactory
বিজ্ঞাপন ট্যাগ দ্বারা সংজ্ঞায়িত বিজ্ঞাপন সন্নিবেশ করার জন্য একটি AdsMediaSource
এ বিষয়বস্তু মিডিয়া উৎসকে মোড়ানো হবে। এটি কাজ করার জন্য, প্লেয়ারকে তার DefaultMediaSourceFactory
সেই অনুযায়ী কনফিগার করতে হবে।