মিডিয়া সোর্স

ExoPlayer-এ, প্রতিটি মিডিয়া আইটেমকে MediaItem দিয়ে দেখানো হয়। তবে, ইন্টার্নালি প্লেয়ারকে কন্টেন্ট চালানোর জন্য MediaSource ইনস্ট্যান্সের প্রয়োজন হয়। প্লেয়ার MediaSource.Factory ব্যবহার করে মিডিয়া আইটেম থেকে এগুলি তৈরি করে।

সাধারণত, প্লেয়ার একটি DefaultMediaSourceFactory ব্যবহার করে, যা নিম্নলিখিত কন্টেন্ট MediaSource ইমপ্লিমেন্টেশনের ইনস্ট্যান্স তৈরি করতে পারে:

DefaultMediaSourceFactory সংশ্লিষ্ট মিডিয়া আইটেমের প্রপার্টির উপর নির্ভর করে আরও জটিল মিডিয়া সোর্সও তৈরি করতে পারে। এটি মিডিয়া আইটেম পৃষ্ঠায় আরও বিস্তারিতভাবে বর্ণনা করা হয়েছে।

যেসব অ্যাপের জন্য মিডিয়া সোর্স সেট-আপ প্রয়োজন, যা প্লেয়ারের ডিফল্ট কনফিগারেশনে কাজ করে না, সেগুলির জন্য কাস্টমাইজেশনের একাধিক বিকল্প আছে।

মিডিয়া সোর্স তৈরি করা কাস্টমাইজ করা

প্লেয়ার তৈরি করার সময়, MediaSource.Factory ইনজেক্ট করা যেতে পারে। যেমন, কোনও অ্যাপ যদি বিজ্ঞাপন যোগ করতে চায় এবং ক্যাশিংয়ের জন্য CacheDataSource.Factory ব্যবহার করতে চায়, তাহলে DefaultMediaSourceFactory-এর একটি ইনস্ট্যান্সকে এইসব প্রয়োজনীয়তা পূরণের জন্য কনফিগার করা যেতে পারে এবং প্লেয়ার কনস্ট্রাকশনের সময় ইনজেক্ট করা যেতে পারে:

Kotlin

val mediaSourceFactory: MediaSource.Factory =
  DefaultMediaSourceFactory(context)
    .setDataSourceFactory(cacheDataSourceFactory)
    .setLocalAdInsertionComponents(adsLoaderProvider, playerView)
val player = ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build()

জাভা

MediaSource.Factory mediaSourceFactory =
    new DefaultMediaSourceFactory(context)
        .setDataSourceFactory(cacheDataSourceFactory)
        .setLocalAdInsertionComponents(adsLoaderProvider, /* adViewProvider= */ playerView);
ExoPlayer player =
    new ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build();

উপলভ্য বিকল্পগুলি সম্পর্কে DefaultMediaSourceFactory JavaDoc থেকে আরও বিস্তারিতভাবে জানা যায়।

এছাড়াও, কাস্টম MediaSource.Factory প্রয়োগ ইনজেক্ট করা সম্ভব, যেমন কাস্টম মিডিয়া সোর্স টাইপ তৈরি করার ক্ষেত্রে সহায়তা করা। প্লেলিস্টে যোগ করা প্রতিটি মিডিয়া আইটেমের জন্য মিডিয়া সোর্স তৈরি করতে ফ্যাক্টরির createMediaSource(MediaItem) কল করা হবে।

মিডিয়া সোর্স ভিত্তিক প্লেলিস্ট API

ExoPlayer ইন্টারফেস অতিরিক্ত প্লেলিস্ট পদ্ধতিকে সংজ্ঞায়িত করে যা মিডিয়া আইটেমের পরিবর্তে মিডিয়া সোর্স গ্রহণ করে। এর ফলে প্লেয়ারের ইন্টার্নাল MediaSource.Factory বাইপাস করা এবং মিডিয়া সোর্স ইনস্ট্যান্স সরাসরি প্লেয়ারে পাস করা সম্ভব হয়:

Kotlin

// Set a list of media sources as initial playlist.
exoPlayer.setMediaSources(listOfMediaSources)
// Add a single media source.
exoPlayer.addMediaSource(anotherMediaSource)

// Can be combined with the media item API.
exoPlayer.addMediaItem(/* index= */ 3, MediaItem.fromUri(videoUri))

exoPlayer.prepare()
exoPlayer.play()

জাভা

// Set a list of media sources as initial playlist.
exoPlayer.setMediaSources(listOfMediaSources);
// Add a single media source.
exoPlayer.addMediaSource(anotherMediaSource);

// Can be combined with the media item API.
exoPlayer.addMediaItem(/* index= */ 3, MediaItem.fromUri(videoUri));

exoPlayer.prepare();
exoPlayer.play();

উন্নত মিডিয়া সোর্স কম্পোজিশন

অন্যান্য MediaSource ইনস্ট্যান্স পরিবর্তন ও কম্পোজ করার জন্য ExoPlayer একাধিক MediaSource ইমপ্লিমেন্টেশন প্রদান করে। এগুলি সেইসব ক্ষেত্রে সবচেয়ে উপযোগী যেখানে একাধিক কাস্টমাইজেশন একত্রিত করতে হয় এবং কোনও সহজ সেট-আপ পাথই যথেষ্ট নয়।

  • ClippingMediaSource: নির্দিষ্ট টাইমস্ট্যাম্প রেঞ্জে মিডিয়া ক্লিপ করার অনুমতি দেয়। এটিই একমাত্র পরিবর্তন হলে, এর পরিবর্তে MediaItem.ClippingConfiguration ব্যবহার করা ভাল।
  • FilteringMediaSource: নির্দিষ্ট ধরনের ট্র্যাকের জন্য উপলভ্য ফিল্টার, যেমন, অডিও ও ভিডিও, দুটিই আছে এমন ফাইল থেকে শুধু ভিডিও ট্র্যাক দেখানো। এটিই একমাত্র পরিবর্তন হলে, এর পরিবর্তে ট্র্যাক বেছে নেওয়ার প্যারামিটার ব্যবহার করা ভাল।
  • MergingMediaSource: সমান্তরালভাবে চালানোর জন্য একাধিক মিডিয়া সোর্স মার্জ করে। প্রায় সব ক্ষেত্রেই, সব সোর্স যাতে একই সময়ে শুরু ও শেষ হয় তা নিশ্চিত করতে, adjustPeriodTimeOffsets ও clipDurations-এর মান true সেট করে কনস্ট্রাক্টরকে কল করার পরামর্শ দেওয়া হয়। এই পরিবর্তন যদি সাইড-লোডেড সাবটাইটেল যোগ করার জন্য করা হয়, তাহলে এর পরিবর্তে MediaItem.SubtitleConfiguration ব্যবহার করলে ভালো হয়।
  • ConcatenatingMediaSource2: পরপর চালানোর জন্য একাধিক মিডিয়া সোর্স মার্জ করে। ব্যবহারকারীর কাছে দৃশ্যমান মিডিয়া স্ট্রাকচার একটি Timeline.Window দেখায়, অর্থাৎ এটি একটি আইটেম হিসেবে দেখা যায়। এই পরিবর্তন যদি একাধিক আইটেম চালানোর জন্য করা হয়, যেগুলি একটি আইটেমের মতো দেখতে হওয়ার কথা নয়, তাহলে এর পরিবর্তে প্লেলিস্ট API-এর Player.addMediaItem-এর মতো পদ্ধতি ব্যবহার করা ভাল।
  • SilenceMediaSource: নির্দিষ্ট সময়সীমার জন্য নীরবতা তৈরি করে যা গ্যাপ পূরণ করার জন্য উপযোগী।
  • AdsMediaSource: ক্লায়েন্ট-সাইড বিজ্ঞাপন যোগ করার ক্ষমতা সহ মিডিয়া সোর্সকে এক্সটেন্ড করে। বিস্তারিত জানতে বিজ্ঞাপন যোগ করার নির্দেশিকা দেখুন।
  • ServerSideAdInsertionMediaSource: সার্ভার-সাইড বিজ্ঞাপন যোগ করার সুবিধা সহ মিডিয়া সোর্সকে এক্সটেন্ড করে। বিস্তারিত জানতে বিজ্ঞাপন যোগ করার নির্দেশিকা দেখুন।