Di ExoPlayer, setiap bagian media direpresentasikan oleh MediaItem
. Namun,
secara internal, pemutar memerlukan instance MediaSource
untuk memutar konten. Pemutar
membuatnya dari item media menggunakan MediaSource.Factory
.
Secara default, pemutar menggunakan DefaultMediaSourceFactory
, yang dapat membuat
instance implementasi MediaSource
konten berikut:
DashMediaSource
untuk DASH.SsMediaSource
untuk SmoothStreaming.HlsMediaSource
untuk HLS.ProgressiveMediaSource
untuk file media biasa.RtspMediaSource
untuk RTSP.
DefaultMediaSourceFactory
juga dapat membuat sumber media yang lebih kompleks, bergantung
pada properti item media yang sesuai. Hal ini dijelaskan lebih
mendetail di
Halaman item media.
Untuk aplikasi yang memerlukan penyiapan sumber media yang tidak didukung oleh konfigurasi default pemutar, ada beberapa opsi untuk penyesuaian.
Menyesuaikan pembuatan sumber media
Saat membangun pemutar, MediaSource.Factory
dapat dimasukkan. Misalnya,
jika aplikasi ingin menyisipkan iklan dan menggunakan CacheDataSource.Factory
untuk mendukung
cache, instance DefaultMediaSourceFactory
dapat dikonfigurasi agar sesuai
dengan persyaratan ini dan dimasukkan selama konstruksi pemutar:
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();
JavaDoc DefaultMediaSourceFactory
menjelaskan opsi yang tersedia secara lebih mendetail.
Anda juga dapat memasukkan implementasi MediaSource.Factory
kustom, misalnya untuk mendukung pembuatan jenis sumber media kustom. createMediaSource(MediaItem)
factory akan dipanggil untuk membuat sumber media bagi setiap
item media yang
ditambahkan ke playlist.
API playlist berbasis sumber media
Antarmuka ExoPlayer
menentukan metode playlist tambahan yang menerima
sumber media, bukan item media. Hal ini memungkinkan Anda mengabaikan
MediaSource.Factory
internal pemutar dan meneruskan instance sumber media ke
pemutar secara langsung:
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();
Komposisi sumber media lanjutan
ExoPlayer menyediakan beberapa implementasi MediaSource
untuk mengubah dan menyusun
instance MediaSource
lainnya. Hal ini paling berguna jika beberapa
penyesuaian harus digabungkan dan tidak ada jalur penyiapan yang lebih sederhana
yang memadai.
ClippingMediaSource
: Memungkinkan untuk memotong media ke rentang stempel waktu yang ditentukan. Jika ini adalah satu-satunya modifikasi, sebaiknya gunakanMediaItem.ClippingConfiguration
.FilteringMediaSource
: Memfilter trek yang tersedia ke jenis yang ditentukan, misalnya, hanya mengekspos trek video dari file yang berisi audio dan video. Jika ini adalah satu-satunya modifikasi, sebaiknya gunakan parameter pemilihan jalur.MergingMediaSource
: Menggabungkan beberapa sumber media untuk diputar secara paralel. Dalam hampir semua kasus, sebaiknya panggil konstruktor denganadjustPeriodTimeOffsets
danclipDurations
disetel ke benar untuk memastikan semua sumber dimulai dan berakhir pada waktu yang sama. Jika modifikasi ini dilakukan untuk menambahkan subtitel yang dimuat samping, sebaiknya gunakanMediaItem.SubtitleConfiguration
.ConcatenatingMediaSource2
: Menggabungkan beberapa sumber media untuk diputar secara berurutan. Struktur media yang terlihat oleh pengguna mengekspos satuTimeline.Window
, artinya terlihat seperti satu item. Jika modifikasi ini dilakukan untuk memutar beberapa item yang seharusnya tidak terlihat seperti satu item, sebaiknya gunakan metode playlist API sepertiPlayer.addMediaItem
.SilenceMediaSource
: Menghasilkan keheningan selama durasi yang ditentukan yang berguna untuk mengisi kesenjangan.AdsMediaSource
: Memperluas sumber media dengan kemampuan penyisipan iklan sisi klien. Lihat panduan penyisipan iklan untuk mengetahui detailnya.ServerSideAdInsertionMediaSource
: Memperluas sumber media dengan kemampuan penyisipan iklan sisi server. Lihat panduan penyisipan iklan untuk mengetahui detailnya.