Sleep and retry when creating a MediaCodec instance fails. This works around an issue that occurs on some devices when switching a surface from a secure codec to another codec (#8696).
Add MediaCodecAdapter.getMetrics() to allow users obtain metrics data from MediaCodec (#9766).
Disable automatic speed adjustment for live streams that neither have low-latency features nor a user request setting the speed (#9329).
Rename DecoderCounters#inputBufferCount to queuedInputBufferCount.
Make SimpleExoPlayer.renderers private. Renderers can be accessed via ExoPlayer.getRenderer.
Updated some AnalyticsListener.EventFlags constant values to match values in Player.EventFlags.
Split AnalyticsCollector into an interface and default implementation to allow it to be stripped by R8 if an app doesn't need it.
Track selection:
Support preferred video role flags in track selection (#9402).
Update video track selection logic to take preferred MIME types and role flags into account when selecting multiple video tracks for adaptation (#9519).
Update video and audio track selection logic to only choose formats for adaptive selections that have the same level of decoder and hardware support (#9565).
Update video track selection logic to prefer more efficient codecs if multiple codecs are supported by primary, hardware-accelerated decoders (#4835).
Prefer audio content preferences (for example, the "default" audio track or a track matching the system locale language) over technical track selection constraints (for example, preferred MIME type, or maximum channel count).
Prohibit duplicate TrackGroups in a TrackGroupArray. TrackGroups can always be made distinguishable by setting an id in the TrackGroup constructor. This fixes a crash when resuming playback after backgrounding the app with an active track override
(#9718).
Amend logic in AdaptiveTrackSelection to allow a quality increase under sufficient network bandwidth even if playback is very close to the
live edge (#9784).
Video:
Fix decoder fallback logic for Dolby Vision to use a compatible H264/H265 decoder if needed.
Audio:
Fix decoder fallback logic for Dolby Atmos (E-AC3-JOC) to use a compatible E-AC3 decoder if needed.
Change AudioCapabilities APIs to require passing explicitly AudioCapabilities.DEFAULT_AUDIO_CAPABILITIES instead of null.
Allow customization of the AudioTrack buffer size calculation by injecting an AudioTrackBufferSizeProvider to DefaultAudioSink (#8891).
Retry AudioTrack creation if the requested buffer size was > 1MB (#9712).
Extractors:
Fix incorrect parsing of H.265 SPS NAL units (#9719).
Parse Vorbis Comments (including METADATA_BLOCK_PICTURE) in Ogg Opus and Ogg Vorbis files.
Text:
Add a MediaItem.SubtitleConfiguration.id field which is propagated to the Format.id field of the subtitle track created from the configuration (#9673).
Add basic support for WebVTT subtitles in Matroska containers (#9886).
Prevent Cea708Decoder from reading more than the declared size of a service block.
DRM:
Remove playbackLooper from DrmSessionManager.(pre)acquireSession. When a DrmSessionManager is used by an app in a custom MediaSource, the playbackLooper needs to be passed to DrmSessionManager.setPlayer instead.
Sleep and retry when creating a MediaCodec instance fails. This works
around an issue that occurs on some devices when switching a surface
from a secure codec to another codec
(#8696).
Add MediaCodecAdapter.getMetrics() to allow users obtain metrics data
from MediaCodec.
(#9766).
Disable automatic speed adjustment for live streams that neither have
low-latency features nor a user request setting the speed
(#9329).
Rename DecoderCounters#inputBufferCount to queuedInputBufferCount.
Make SimpleExoPlayer.renderers private. Renderers can be accessed via
ExoPlayer.getRenderer.
Updated some AnalyticsListener.EventFlags constant values to match
values in Player.EventFlags.
Split AnalyticsCollector into an interface and default implementation
to allow it to be stripped by R8 if an app doesn't need it.
Track selection:
Support preferred video role flags in track selection
(#9402).
Update video track selection logic to take preferred MIME types and role
flags into account when selecting multiple video tracks for adaptation
(#9519).
Update video and audio track selection logic to only choose formats for
adaptive selections that have the same level of decoder and hardware
support (#9565).
Update video track selection logic to prefer more efficient codecs if
multiple codecs are supported by primary, hardware-accelerated decoders
(#4835).
Prefer audio content preferences (for example, the "default" audio track
or a track matching the system locale language) over technical track
selection constraints (for example, preferred MIME type, or maximum
channel count).
Prohibit duplicate TrackGroups in a TrackGroupArray. TrackGroups
can always be made distinguishable by setting an id in the
TrackGroup constructor. This fixes a crash when resuming playback
after backgrounding the app with an active track override
(#9718).
Amend logic in AdaptiveTrackSelection to allow a quality increase
under sufficient network bandwidth even if playback is very close to the
live edge (#9784).
Video:
Fix decoder fallback logic for Dolby Vision to use a compatible
H264/H265 decoder if needed.
Audio:
... (truncated)
Commits
f1b37bc Merge pull request #10001 from google/dev-v2-r2.17.0
b3593e6 Version bump to exoplayer:2.17.0 and media3:1.0.0-alpha02
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Bumps exoplayer from 2.15.0 to 2.17.0.
Release notes
Sourced from exoplayer's releases.
... (truncated)
Changelog
Sourced from exoplayer's changelog.
... (truncated)
Commits
f1b37bc
Merge pull request #10001 from google/dev-v2-r2.17.0b3593e6
Version bump to exoplayer:2.17.0 and media3:1.0.0-alpha0264a3cf7
Update javadoc for 2.17.03985dfd
Suppress@VisibleForTesting
violation in Transformerfb3101d
Suppress framework muxer lint warning7e8cfc1
Fix DefaultAnalyticsCollectorTest failure when run with JaCoCo62b0440
Depend on llvm-xy bin utils instead of GNU's binutils164ab4e
Make sure native library loads use correct class loader0bbc283
Clear ad playback state map when AdsLoader is released9ea6be2
Integrate IMA SSAI samples in main demo appDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)