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:
- DASH için
DashMediaSource
. - SmoothStreaming için
SsMediaSource
- HLS için
HlsMediaSource
. - Normal medya dosyaları için
ProgressiveMediaSource
. - RTSP için
RtspMediaSource
.
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.
Medya kaynağı oluşturmayı özelleştirme
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.
Medya kaynağına dayalı oynatma listesi API'si
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();
Gelişmiş medya kaynağı bileşimi
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 yerineMediaItem.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çinadjustPeriodTimeOffsets
veclipDurations
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 yerineMediaItem.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 birTimeline.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 yerinePlayer.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.