Di ExoPlayer, setiap bagian media direpresentasikan oleh MediaItem
. Namun
secara internal, pemutar membutuhkan instance MediaSource
untuk memutar konten. Tujuan
pemutar membuatnya dari item media menggunakan MediaSource.Factory
.
Secara default, pemutar menggunakan DefaultMediaSourceFactory
, yang dapat membuat
instance penerapan 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 lanjut
detail tentang
Halaman item media.
Untuk aplikasi yang memerlukan penyiapan sumber media yang tidak didukung oleh konfigurasi bawaan pemutar, ada beberapa opsi untuk dan penyesuaian.
Menyesuaikan pembuatan sumber media
Saat membangun pemutar, MediaSource.Factory
dapat dimasukkan. Misalnya,
jika aplikasi ingin menyisipkan iklan dan menggunakan CacheDataSource.Factory
untuk mendukung
dalam cache, instance DefaultMediaSourceFactory
dapat dikonfigurasi agar cocok
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();
Tujuan
DefaultMediaSourceFactory
JavaDoc
menjelaskan opsi yang tersedia secara lebih mendetail.
Anda juga dapat memasukkan implementasi MediaSource.Factory
kustom, untuk
untuk mendukung pembuatan jenis sumber media kustom.
createMediaSource(MediaItem)
akan dipanggil untuk membuat sumber media untuk masing-masing
item media yang
ditambahkan ke playlist.
API playlist berbasis sumber media
Antarmuka ExoPlayer
menentukan metode playlist tambahan yang menerima
sumber media yang berbeda, bukan item media. Hal ini memungkinkan untuk mengabaikan
MediaSource.Factory
internal pemutar dan teruskan instance sumber media ke
pemain 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 memodifikasi dan menyusun
instance MediaSource
lainnya. Ini paling berguna dalam kasus di mana beberapa
khusus harus digabungkan dan tidak ada
jalur penyiapan yang lebih sederhana yang
memadai.
ClippingMediaSource
: Memungkinkan klip media ke rentang stempel waktu yang ditentukan. Jika ini satu-satunya modifikasi, lebih baik menggunakanMediaItem.ClippingConfiguration
saja.FilteringMediaSource
: Memfilter trek yang tersedia ke jenis yang ditentukan, untuk Misalnya, dengan mengekspos trek video dari file yang berisi kedua tindakan dan video. Jika ini satu-satunya modifikasi, lebih baik menggunakan parameter pemilihan trek.MergingMediaSource
: Menggabungkan beberapa sumber media untuk diputar secara paralel. Di beberapa dalam hampir semua kasus, disarankan untuk memanggil konstruktor denganadjustPeriodTimeOffsets
danclipDurations
ditetapkan ke benar (true) untuk memastikan semua sumber dimulai dan berakhir secara bersamaan. Jika modifikasi ini dilakukan untuk menambahkan sub judul {i>side-load<i}, lebih baik untuk menggunakanMediaItem.SubtitleConfiguration
saja.ConcatenatingMediaSource2
: Menggabungkan beberapa sumber media untuk diputar secara berurutan. Struktur media yang terlihat oleh pengguna mengekspos satuTimeline.Window
, artinya terlihat seperti satu item. Jika ini modifikasi dilakukan untuk memainkan beberapa item yang seharusnya tidak terlihat satu, sebaiknya gunakan metode playlist API sepertiPlayer.addMediaItem
saja.SilenceMediaSource
: Menghasilkan keheningan selama durasi tertentu yang berguna untuk mengisi kesenjangan.AdsMediaSource
: Memperluas sumber media dengan penyisipan iklan sisi klien kemampuan IT. Lihat panduan penyisipan iklan untuk mengetahui detailnya.ServerSideAdInsertionMediaSource
: Memperluas sumber media dengan iklan sisi server kemampuan penyisipan. Lihat panduan penyisipan iklan untuk mengetahui detailnya.