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

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 সত্যে সেট করে কনস্ট্রাক্টরকে কল করার পরামর্শ দেওয়া হয়। যদি এই পরিবর্তনটি সাইড-লোড করা সাবটাইটেল যোগ করার জন্য করা হয়, তাহলে এর পরিবর্তে MediaItem.SubtitleConfiguration ব্যবহার করা বাঞ্ছনীয়।
  • ConcatenatingMediaSource2 : ধারাবাহিকভাবে চালানোর জন্য একাধিক মিডিয়া উৎস একত্রিত করে। ব্যবহারকারী-দৃশ্যমান মিডিয়া কাঠামো একটি একক Timeline.Window প্রকাশ করে, যার অর্থ এটি একটি একক আইটেমের মতো দেখায়৷ যদি এই পরিবর্তনটি একাধিক আইটেম চালানোর জন্য করা হয় যেগুলিকে একটির মতো দেখায় না, তবে প্লেলিস্ট API পদ্ধতিগুলি যেমন Player.addMediaItem ব্যবহার করা ভাল৷
  • SilenceMediaSource : একটি নির্দিষ্ট সময়ের জন্য নীরবতা তৈরি করে যা ফাঁক পূরণ করতে কার্যকর।
  • AdsMediaSource : ক্লায়েন্ট-সাইড বিজ্ঞাপন সন্নিবেশ ক্ষমতা সহ একটি মিডিয়া উৎস প্রসারিত করে। বিস্তারিত জানার জন্য বিজ্ঞাপন সন্নিবেশ গাইড পড়ুন.
  • ServerSideAdInsertionMediaSource : সার্ভার-সাইড বিজ্ঞাপন সন্নিবেশ ক্ষমতা সহ একটি মিডিয়া উৎস প্রসারিত করে। বিস্তারিত জানার জন্য বিজ্ঞাপন সন্নিবেশ গাইড পড়ুন.