The problem occurs when the primary media playlist URL switches from one whose latest snapshot has not yet got the ended tag, to one whose latest snapshot already has the ended tag. In this case: - We trigger a redundant load of the ended playlist. - When the redundant load completes, MediaPlaylistBundle.processLoadedPlaylist detects that the playlist is unchanged from the one it already has, and so doesn't call onPlaylistUpdated. - PrimaryPlaylistListener.onPrimaryPlaylistRefreshed is never called with the new primary. Hence the externally visible primary is still the one that hasn't ended. HlsMediaSource therefore thinks the event hasn't ended, which in turn prevents the player from transitioning to the ended state. This commit detects when the new primary already has the ended tag. In this case, we call onPrimaryPlaylistRefreshed directly and remove the unnecessary playlist load. Issue: #9067 #minor-release PiperOrigin-RevId: 380680532 |
||
|---|---|---|
| .. | ||
| src | ||
| build.gradle | ||
| README.md | ||
ExoPlayer HLS library module
Provides support for HTTP Live Streaming (HLS) content.
Adding a dependency to this module is all that's required to enable playback of
HLS MediaItems added to an ExoPlayer or SimpleExoPlayer in their default
configurations. Internally, DefaultMediaSourceFactory will automatically
detect the presence of the module and convert HLS MediaItems into
HlsMediaSource instances for playback.
Similarly, a DownloadManager in its default configuration will use
DefaultDownloaderFactory, which will automatically detect the presence of
the module and build HlsDownloader instances to download HLS content.
For advanced playback use cases, applications can build HlsMediaSource
instances and pass them directly to the player. For advanced download use cases,
HlsDownloader can be used directly.
Links
- Developer Guide.
- Javadoc: Classes matching
com.google.android.exoplayer2.source.hls.*belong to this module.