মিডিয়া সূত্র
সেভ করা পৃষ্ঠা গুছিয়ে রাখতে 'সংগ্রহ' ব্যবহার করুন
আপনার পছন্দ অনুযায়ী কন্টেন্ট সেভ করুন ও সঠিক বিভাগে রাখুন।
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)
কল করা হবে।
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
: সার্ভার-সাইড বিজ্ঞাপন সন্নিবেশ ক্ষমতা সহ একটি মিডিয়া উৎস প্রসারিত করে। বিস্তারিত জানার জন্য বিজ্ঞাপন সন্নিবেশ গাইড পড়ুন.
এই পৃষ্ঠার কন্টেন্ট ও কোডের নমুনাগুলি Content License-এ বর্ণিত লাইসেন্সের অধীনস্থ। Java এবং OpenJDK হল Oracle এবং/অথবা তার অ্যাফিলিয়েট সংস্থার রেজিস্টার্ড ট্রেডমার্ক।
2025-07-29 UTC-তে শেষবার আপডেট করা হয়েছে।
[[["সহজে বোঝা যায়","easyToUnderstand","thumb-up"],["আমার সমস্যার সমাধান হয়েছে","solvedMyProblem","thumb-up"],["অন্যান্য","otherUp","thumb-up"]],[["এতে আমার প্রয়োজনীয় তথ্য নেই","missingTheInformationINeed","thumb-down"],["খুব জটিল / অনেক ধাপ","tooComplicatedTooManySteps","thumb-down"],["পুরনো","outOfDate","thumb-down"],["অনুবাদ সংক্রান্ত সমস্যা","translationIssue","thumb-down"],["নমুনা / কোড সংক্রান্ত সমস্যা","samplesCodeIssue","thumb-down"],["অন্যান্য","otherDown","thumb-down"]],["2025-07-29 UTC-তে শেষবার আপডেট করা হয়েছে।"],[],[],null,["# Media sources\n\nIn ExoPlayer, every piece of media is represented by a `MediaItem`. However\ninternally, the player needs `MediaSource` instances to play the content. The\nplayer creates these from media items using a `MediaSource.Factory`.\n\nBy default the player uses a `DefaultMediaSourceFactory`, which can create\ninstances of the following content `MediaSource` implementations:\n\n- `DashMediaSource` for [DASH](/guide/topics/media/exoplayer/dash).\n- `SsMediaSource` for [SmoothStreaming](/guide/topics/media/exoplayer/smoothstreaming).\n- `HlsMediaSource` for [HLS](/guide/topics/media/exoplayer/hls).\n- `ProgressiveMediaSource` for [regular media files](/guide/topics/media/exoplayer/progressive).\n- `RtspMediaSource` for [RTSP](/guide/topics/media/exoplayer/rtsp).\n\n`DefaultMediaSourceFactory` can also create more complex media sources depending\non the properties of the corresponding media items. This is described in more\ndetail on the\n[Media items page](/guide/topics/media/exoplayer/media-items).\n\nFor apps that need media source setups that are not supported by the\ndefault configuration of the player, there are several options for\ncustomization.\n\nCustomizing media source creation\n---------------------------------\n\nWhen building the player, a `MediaSource.Factory` can be injected. For example,\nif an app wants to insert ads and use a `CacheDataSource.Factory` to support\ncaching, an instance of `DefaultMediaSourceFactory` can be configured to match\nthese requirements and injected during player construction: \n\n### Kotlin\n\n```kotlin\n val mediaSourceFactory: MediaSource.Factory =\n DefaultMediaSourceFactory(context)\n .setDataSourceFactory(cacheDataSourceFactory)\n .setLocalAdInsertionComponents(adsLoaderProvider, playerView)\n val player = ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build()\n```\n\n### Java\n\n```java\nMediaSource.Factory mediaSourceFactory =\n new DefaultMediaSourceFactory(context)\n .setDataSourceFactory(cacheDataSourceFactory)\n .setLocalAdInsertionComponents(adsLoaderProvider, /* adViewProvider= */ playerView);\nExoPlayer player =\n new ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build();\n```\n\n\u003cbr /\u003e\n\nThe\n[`DefaultMediaSourceFactory` JavaDoc](/reference/androidx/media3/exoplayer/source/DefaultMediaSourceFactory)\ndescribes the available options in more detail.\n\nIt's also possible to inject a custom `MediaSource.Factory` implementation, for\nexample to support creation of a custom media source type. The factory's\n`createMediaSource(MediaItem)` will be called to create a media source for each\nmedia item that is\n[added to the playlist](/guide/topics/media/exoplayer/playlists).\n\nMedia source based playlist API\n-------------------------------\n\nThe [`ExoPlayer`](/reference/androidx/media3/exoplayer/ExoPlayer) interface defines additional playlist methods that accept\nmedia sources rather than media items. This makes it possible to bypass the\nplayer's internal `MediaSource.Factory` and pass media source instances to the\nplayer directly: \n\n### Kotlin\n\n```kotlin\n// Set a list of media sources as initial playlist.\nexoPlayer.setMediaSources(listOfMediaSources)\n// Add a single media source.\nexoPlayer.addMediaSource(anotherMediaSource)\n\n// Can be combined with the media item API.\nexoPlayer.addMediaItem(/* index= */ 3, MediaItem.fromUri(videoUri))\n\nexoPlayer.prepare()\nexoPlayer.play()\n```\n\n### Java\n\n```java\n// Set a list of media sources as initial playlist.\nexoPlayer.setMediaSources(listOfMediaSources);\n// Add a single media source.\nexoPlayer.addMediaSource(anotherMediaSource);\n\n// Can be combined with the media item API.\nexoPlayer.addMediaItem(/* index= */ 3, MediaItem.fromUri(videoUri));\n\nexoPlayer.prepare();\nexoPlayer.play();\n```\n\n\u003cbr /\u003e\n\nAdvanced media source composition\n---------------------------------\n\nExoPlayer provides multiple `MediaSource` implementations to modify and compose\nother `MediaSource` instances. These are most useful in cases where multiple\ncustomizations have to be combined and none of the simpler setup paths are\nsufficient.\n\n- `ClippingMediaSource`: Allows to clip media to a specified timestamp range. If this is the only modification, it's preferable to use [`MediaItem.ClippingConfiguration`](/guide/topics/media/exoplayer/media-items#clipping-media) instead.\n- `FilteringMediaSource`: Filters available tracks to the specified types, for example, just exposing the video track from a file that contains both audio and video. If this is the only modification, it's preferable to use [track selection parameters](/guide/topics/media/exoplayer/track-selection#disabling-track) instead.\n- `MergingMediaSource`: Merges multiple media sources to play in parallel. In almost all cases, it's advisable to call the constructor with `adjustPeriodTimeOffsets` and `clipDurations` set to true to ensure all sources start and end at the same time. If this modification is done to add side-loaded subtitles, it's preferable to use [`MediaItem.SubtitleConfiguration`](/guide/topics/media/exoplayer/media-items#sideloading-subtitle) instead.\n- `ConcatenatingMediaSource2`: Merges multiple media source to play consecutively. The user-visible media structure exposes a single `Timeline.Window`, meaning that it looks like a single item. If this modification is done to play multiple items that are not supposed to look like a single one, it's preferable to use the [playlist API](/guide/topics/media/exoplayer/playlists) methods like `Player.addMediaItem` instead.\n- `SilenceMediaSource`: Generates silence for a specified duration that is useful to fill gaps.\n- `AdsMediaSource`: Extends a media source with client-side ad insertion capabilities. Refer to the [ad insertion guide](/guide/topics/media/exoplayer/ad-insertion) for details.\n- `ServerSideAdInsertionMediaSource`: Extends a media source with server-side ad insertion capabilities. Refer to the [ad insertion guide](/guide/topics/media/exoplayer/ad-insertion) for details."]]