En ExoPlayer, cada elemento multimedia se representa con un MediaItem
. Sin embargo,
internamente, el reproductor necesita MediaSource
instancias para reproducir el contenido. El
el reproductor los crea a partir de elementos multimedia con un MediaSource.Factory
.
De forma predeterminada, el reproductor usa un DefaultMediaSourceFactory
, que puede crear
instancias de las siguientes implementaciones de MediaSource
de contenido:
DashMediaSource
para DASHSsMediaSource
para SmoothStreaming.HlsMediaSource
para HLS.ProgressiveMediaSource
para archivos multimedia normalesRtspMediaSource
para RTSP.
DefaultMediaSourceFactory
también puede crear fuentes de contenido multimedia más complejas según
en las propiedades de los elementos multimedia correspondientes. Esto se describe en más
detalle en la
Página Elementos multimedia.
Para las apps que necesitan configuraciones de fuentes de contenido multimedia que no son compatibles con configuración predeterminada del reproductor, hay varias opciones para personalización.
Cómo personalizar la creación de fuentes multimedia
Cuando se compila el reproductor, se puede insertar un MediaSource.Factory
. Por ejemplo:
si una app quiere insertar anuncios y usar un CacheDataSource.Factory
para admitir
en caché, se puede configurar una instancia de DefaultMediaSourceFactory
para que coincida
estos requisitos e inyectados durante la construcción del reproductor:
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();
El
DefaultMediaSourceFactory
JavaDoc
describe las opciones disponibles con más detalle.
También es posible insertar una implementación de MediaSource.Factory
personalizada para
para admitir la creación de un tipo personalizado de fuente multimedia. La fábrica
Se llamará a createMediaSource(MediaItem)
para crear una fuente de contenido multimedia para cada
elemento multimedia que se
agregado a la playlist.
API de playlist basada en fuentes multimedia
La interfaz ExoPlayer
define los métodos de playlist adicionales que aceptan
fuentes multimedia en lugar de elementos multimedia. Esto permite evitar
MediaSource.Factory
interno del reproductor y pasa instancias de fuentes multimedia al
directamente:
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();
Composición avanzada de fuentes multimedia
ExoPlayer proporciona varias implementaciones de MediaSource
para modificar y redactar
otras MediaSource
instancias. Son muy útiles en los casos en que varios
se deben combinar las personalizaciones, y no se usa ninguna
suficientes.
ClippingMediaSource
: Permite recortar contenido multimedia en función de un rango de marca de tiempo especificado. Si esta es la única modificación, es preferible usarMediaItem.ClippingConfiguration
en su lugar.FilteringMediaSource
: filtra los segmentos disponibles para los tipos especificados por Por ejemplo, solo mostrar la pista de video de un archivo que contiene ambas y video. Si esta es la única modificación, es preferible usar Haz un seguimiento de los parámetros de selección.MergingMediaSource
: Combina varias fuentes multimedia para reproducirlas en paralelo. En en casi todos los casos, es recomendable llamar al constructor conadjustPeriodTimeOffsets
yclipDurations
establecidos como verdadero para garantizar que todos las fuentes empiezan y terminan al mismo tiempo. Si esta modificación se hace para agregar subtítulos transferibles, es preferible usarlosMediaItem.SubtitleConfiguration
en su lugar.ConcatenatingMediaSource2
: Combina varias fuentes multimedia para reproducirlas. de forma consecutiva. La estructura multimedia visible para el usuario exponeTimeline.Window
, lo que significa que parece un solo elemento. Si esta La modificación se hace para reproducir varios elementos que no deberían verse como solo hay uno, es preferible usar los métodos de la API de playlist, comoPlayer.addMediaItem
en su lugar.SilenceMediaSource
: Genera silencio durante una duración especificada que es útil para llenar los vacíos.AdsMediaSource
: Extiende una fuente multimedia con la inserción de anuncios del cliente capacidades de integración. Consulte la guía de inserción de anuncios para obtener más información.ServerSideAdInsertionMediaSource
: Extiende una fuente multimedia con un anuncio del servidor de inserción y producción. Consulte la guía de inserción de anuncios para obtener más información.