মিডিয়া সূত্র

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

ডিফল্টরূপে প্লেয়ারটি একটি DefaultMediaSourceFactory ব্যবহার করে, যা নিম্নলিখিত কন্টেন্ট MediaSource বাস্তবায়নের উদাহরণ তৈরি করতে পারে:

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

যেসব অ্যাপের মিডিয়া সোর্স সেটআপের প্রয়োজন হয় এবং প্লেয়ারের ডিফল্ট কনফিগারেশন দ্বারা সমর্থিত নয়, তাদের জন্য কাস্টমাইজেশনের জন্য বেশ কয়েকটি বিকল্প রয়েছে।

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

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

কোটলিন

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 বাইপাস করা এবং সরাসরি প্লেয়ারে মিডিয়া সোর্স ইনস্ট্যান্স পাস করা সম্ভব করে:

কোটলিন

// 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();

উন্নত মিডিয়া সোর্স রচনা

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

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