Fontes de mídia
Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
No ExoPlayer, cada mídia é representada por uma MediaItem
. No entanto,
Internamente, o player precisa de instâncias de MediaSource
para reproduzir o conteúdo. A
o player cria esses itens a partir de itens de mídia usando um MediaSource.Factory
.
Por padrão, o player usa um DefaultMediaSourceFactory
, que pode criar
instâncias das seguintes implementações de MediaSource
de conteúdo:
A DefaultMediaSourceFactory
também pode criar fontes de mídia mais complexas, dependendo
nas propriedades dos itens de mídia correspondentes. Isso é descrito em mais
detalhes sobre
Página de itens de mídia.
Para apps que precisam de configurações de origem de mídia que não têm suporte das
configuração padrão do player, há várias opções para
e personalização.
Ao criar o player, um MediaSource.Factory
pode ser injetado. Por exemplo:
se um app quiser inserir anúncios e usar um CacheDataSource.Factory
para oferecer suporte a
armazenamento em cache, uma instância de DefaultMediaSourceFactory
pode ser configurada para corresponder
esses requisitos e injetados durante a construção do jogador:
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();
A
DefaultMediaSourceFactory
JavaDoc
descreve as opções disponíveis em mais detalhes.
Também é possível injetar uma implementação de MediaSource.Factory
personalizada, para
exemplo para oferecer suporte à criação de um tipo de origem de mídia personalizada. A fábrica
createMediaSource(MediaItem)
será chamado para criar uma fonte de mídia para cada
que é um item de mídia
adicionado à playlist.
A interface ExoPlayer
define outros métodos de playlist que aceitam
fontes de mídia em vez de itens de mídia. Com isso, é possível ignorar
MediaSource.Factory
interno do player e transmitir instâncias de origem de mídia para o
player de vídeo diretamente:
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();
O ExoPlayer fornece várias implementações de MediaSource
para modificar e compor
outras instâncias MediaSource
. Eles são mais úteis nos casos em que há vários
personalizações precisam ser combinadas, e nenhum dos caminhos de configuração mais simples é
suficientes.
ClippingMediaSource
: permite cortar a mídia em um intervalo de carimbo de data/hora especificado.
Se essa for a única modificação, é preferível usar
MediaItem.ClippingConfiguration
.
FilteringMediaSource
: filtra as faixas disponíveis para os tipos especificados.
por exemplo, expor a faixa de vídeo de um arquivo que contém
e vídeo. Se essa for a única modificação, é preferível usar
parâmetros de seleção de faixa.
MergingMediaSource
: mescla várias fontes de mídia para reproduzir em paralelo. Em
em quase todos os casos, é aconselhável chamar o construtor com
adjustPeriodTimeOffsets
e clipDurations
definidos como verdadeiros para garantir que todos
as fontes começam e terminam ao mesmo tempo. Se a modificação for feita para adicionar
e legendas com sideload, é preferível usar
MediaItem.SubtitleConfiguration
.
ConcatenatingMediaSource2
: mescla várias fontes de mídia para reproduzir.
consecutivamente. A estrutura de mídia visível ao usuário expõe um único
Timeline.Window
, o que significa que ele parece um único item. Se esse
a modificação é realizada para reproduzir vários itens que não deveriam parecer
é preferível usar os métodos da API Playlist, como
Player.addMediaItem
.
SilenceMediaSource
: gera silêncio por uma duração especificada que é
úteis para preencher lacunas.
AdsMediaSource
: estende uma origem de mídia com a inserção de anúncios do lado do cliente
recursos. Consulte o guia de inserção de anúncios para mais detalhes.
ServerSideAdInsertionMediaSource
: estende uma fonte de mídia com um anúncio do lado do servidor
recursos de inserção. Consulte o guia de inserção de anúncios para mais detalhes.
O conteúdo e os exemplos de código nesta página estão sujeitos às licenças descritas na Licença de conteúdo. Java e OpenJDK são marcas registradas da Oracle e/ou suas afiliadas.
Última atualização 2025-07-27 UTC.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Não contém as informações de que eu preciso","missingTheInformationINeed","thumb-down"],["Muito complicado / etapas demais","tooComplicatedTooManySteps","thumb-down"],["Desatualizado","outOfDate","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Problema com as amostras / o código","samplesCodeIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 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."]]