Medya kaynakları
Koleksiyonlar ile düzeninizi koruyun
İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
ExoPlayer'da her medya parçası bir MediaItem
ile temsil edilir. Ancak
dahili olarak, oynatıcının içeriği oynatmak için MediaSource
örneğe ihtiyacı vardır. İlgili içeriği oluşturmak için kullanılan
oynatıcı, bunları bir MediaSource.Factory
kullanarak medya öğelerinden oluşturur.
Oynatıcı varsayılan olarak bir DefaultMediaSourceFactory
kullanır ve böylece
aşağıdaki içerik MediaSource
uygulamalarının örnekleri:
DefaultMediaSourceFactory
, cihaza bağlı olarak daha karmaşık medya kaynakları da oluşturabilir
özelliklerini açar. Bu konu hakkında daha fazla bilgi
ilgili ayrıntıyı
Medya öğeleri sayfası.
için birkaç seçenek vardır.
birçok seçenek var.
Oynatıcıyı oluştururken MediaSource.Factory
yerleştirilebilir. Örneğin,
Bir uygulama reklam eklemek ve CacheDataSource.Factory
uygulamasını desteklemek için
önbellek olarak sunuluyorsa DefaultMediaSourceFactory
öğesinin bir örneği eşleşecek şekilde yapılandırılabilir
şu şartlar geçerlidir ve oynatıcı üretimi sırasında eklenir:
Kotlin
val mediaSourceFactory: MediaSource.Factory =
DefaultMediaSourceFactory(context)
.setDataSourceFactory(cacheDataSourceFactory)
.setLocalAdInsertionComponents(adsLoaderProvider, playerView)
val player = ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build()
Java
MediaSource.Factory mediaSourceFactory =
new DefaultMediaSourceFactory(context)
.setDataSourceFactory(cacheDataSourceFactory)
.setLocalAdInsertionComponents(adsLoaderProvider, /* adViewProvider= */ playerView);
ExoPlayer player =
new ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build();
İlgili içeriği oluşturmak için kullanılan
DefaultMediaSourceFactory
JavaDoc
'nda mevcut seçenekler daha ayrıntılı olarak açıklanmaktadır.
Özel bir MediaSource.Factory
uygulaması eklemek de mümkündür.
örneğini kullanın. Fabrikanın
Her biri için bir medya kaynağı oluşturmak üzere createMediaSource(MediaItem)
çağrılır
şu medya öğesi:
oynatma listesine eklenir.
ExoPlayer
arayüzü, kabul edilen ek oynatma listesi yöntemlerini tanımlar
medya kaynaklarını arayın. Bu da
oynatıcının dahili MediaSource.Factory
ve medya kaynağı örneklerini
oynatıcıya doğrudan ulaşabilirsiniz:
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()
Java
// 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, değişiklik yapmak ve oluşturmak için birden fazla MediaSource
uygulaması sağlar
MediaSource
örneği daha. Bunlar en çok, birden fazla
özelleştirmelerin birleştirilmesi gerekir ve basit kurulum yollarının hiçbiri
yeterli olacaktır.
ClippingMediaSource
: Belirli bir zaman damgası aralığına medya klibi oluşturulmasına olanak tanır.
Tek değişiklik buysa, başka bir değişiklik yapmak için
Bunun yerine MediaItem.ClippingConfiguration
.
FilteringMediaSource
: Kullanılabilir kanalları, şunun için belirtilen türlere göre filtreler:
Örneğin, video parçasının her iki sesi de içeren bir dosyadan
ve video. Tek değişiklik buysa, başka bir değişiklik yapmak için
seçim parametrelerini izlemeyi deneyin.
MergingMediaSource
: Paralel olarak oynatmak için birden fazla medya kaynağını birleştirir. İçinde
her durumda, oluşturucunun çağrılması için
Tüm özelliklerin geçerli olduğundan emin olmak için adjustPeriodTimeOffsets
ve clipDurations
doğru değerine ayarlandı
aynı anda başlayıp bitiyor. Bu değişiklik
altyazıların başka bir cihazdan
yüklenmesi tercih edilir.
Bunun yerine MediaItem.SubtitleConfiguration
.
ConcatenatingMediaSource2
: Oynatmak için birden fazla medya kaynağını birleştirir
art arda. Kullanıcının görebildiği medya yapısı, tek bir
Timeline.Window
: Yani tek bir öğe gibi görünür. Bu
gibi görünmemesi gereken birden çok öğeyi oynatmak için
bir oynatma listesi oluşturmak isterseniz, aşağıdaki gibi playlist API yöntemlerini
Bunun yerine Player.addMediaItem
.
SilenceMediaSource
: Şu kadar süre boyunca sessizlik oluşturur:
yararlı olabilir.
AdsMediaSource
: İstemci taraflı reklam eklemeyle bir medya kaynağını genişletir
özellikler. Ayrıntılar için reklam ekleme kılavuzuna bakın.
ServerSideAdInsertionMediaSource
: Sunucu tarafı reklamla bir medya kaynağını genişletir
özellikleri ekleyin. Ayrıntılar için reklam ekleme kılavuzuna bakın.
Bu sayfadaki içerik ve kod örnekleri, İçerik Lisansı sayfasında açıklanan lisanslara tabidir. Java ve OpenJDK, Oracle ve/veya satış ortaklarının tescilli ticari markasıdır.
Son güncelleme tarihi: 2025-07-27 UTC.
[[["Anlaması kolay","easyToUnderstand","thumb-up"],["Sorunumu çözdü","solvedMyProblem","thumb-up"],["Diğer","otherUp","thumb-up"]],[["İhtiyacım olan bilgiler yok","missingTheInformationINeed","thumb-down"],["Çok karmaşık / çok fazla adım var","tooComplicatedTooManySteps","thumb-down"],["Güncel değil","outOfDate","thumb-down"],["Çeviri sorunu","translationIssue","thumb-down"],["Örnek veya kod sorunu","samplesCodeIssue","thumb-down"],["Diğer","otherDown","thumb-down"]],["Son güncelleme tarihi: 2025-07-27 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."]]