Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
2.10.2
->2.10.3
1.2.0-alpha04
->1.2.0-beta01
1.7.1
->1.8.0
1.7.1
->1.8.0
1.7.1
->1.8.0
1.7.1
->1.8.0
1.7.1
->1.8.0
1.6.2
->1.7.0
1.6.1
->1.7.0
1.2.1
->1.3.0
1.6.1
->1.7.0
Release Notes
androidx/media (androidx.media3:media3-ui-compose)
v1.8.0
Compare Source
This release includes the following changes since the
1.7.1 release:
ForwardingSimpleBasePlayer
.ExoPlayer
interface(#2522).
DefaultAudioSink
is accessed frommultiple threads. If this happens due to a call to
RendererCapabilities.getFormatSupport
outside of the player, make sureto call this method on the same thread as ExoPlayer's playback thread or
use a different instance than the one used for playback
(#1191).
unsupported by
DefaultTrackSelector
.DECODE_ONLY
flag (which is enabled by default in scrubbing mode).Context
passed toExoPlayer.Builder
.MediaCodec.BUFFER_FLAG_DECODE_ONLY
by default in scrubbing mode.IllegalStateException
whenPreloadMediaSource
is played by anExoPlayer
with a playback thread that is different than the preloadthread (#2495).
cloneAndMove
toShuffleMode
with a default implementation(#2226).
Renderer.getMinDurationToProgressUs
toreturn a larger value if no call to
render
is required.end while paused. For now, the bug fix only takes effect if
ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabled
is enabled.ExoPlayer.setScrubbingModeEnabled(boolean)
method. This optimizesthe player for many frequent seeks (for example, from a user dragging a
scrubber bar around). The behavior of scrubbing mode can be customized
with
setScrubbingModeParameters(..)
onExoPlayer
andExoPlayer.Builder
.AdsMediaSource
may benever reported (#2337).
MergingMediaSource
, for example used whensideloading subtitles
(#2338).
CmcdConfiguration.Factory
to returnnull
to disable CMCDlogging for specific media items
(#2386).
text tracks) to 26MB, which is large enough for 50MP Ultra HDR images
(#2417).
PreCacheHelper
that allows apps to pre-cache a single media withspecified start position and duration.
DefaultPreloadManager
.CodecDbLite
that enables chipset specific optimizations of videoencoding settings.
setEnableCodecDbLite
flag to theDefaultEncoderFactory
to enableCodecDB Lite settings optimization. By default, this flag is set to
false.
addGap()
) with silent audio nowrequires explicitly setting
experimentalSetForceAudioTrack(true)
inEditedMediaItemSequence.Builder
. If the gap is in the middle of thesequence, then this flag is not required.
Muxer
interface frommedia3-transformer
tomedia3-muxer
.MediaItem.Builder().setImageDuration(long)
mandatory toimport a media item as an image.
Transformer.Builder().experimentalSetMp4EditListTrimEnabled(boolean)
which includes an MP4 edit list when trimming to instruct players to
ignore samples between the key frame before the trim start point, and
the trim start point.
custom
VideoCompositorSettings
to arrange sequences into a 2x2 or PiPlayout.
(#2084).
(#2552).
sidx
atoms.This behavior can be enabled using the
FLAG_MERGE_FRAGMENTED_SIDX
flagon
FragmentedMp4Extractor
(#9373).
placeholder seek points), and fall back to binary search seeking if the
duration of the file is known
(#2327).
(#2456).
WavExtractor
to use the header extension's SubFormat data forthe audio format when parsing a
WAVE_FORMAT_EXTENSIBLE
type file.ipcm
andfpcm
boxes defining raw PCM audiotracks (64-bit floating point PCM is not supported).
tkhd
transformation matrices thatboth rotate and reflect the video. This ensures that reflected videos
taken by the iPhone front facing camera display the right way up, but
incorrectly reflected in the y-axis
(#2012).
variable bitrate metadata when falling back to constant bitrate seeking
due to
FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)
(#2194).
AnalyticsListener.onAudioPositionAdvancing
is not calledwhen the audio playback is started very close to the end of the media.
ChannelMappingAudioProcessor
andTrimmingAudioProcessor
.CompositionPlayer
.BaseAudioProcessor#flush()
fromBaseAudioProcessor#reset()
.ChannelMappingAudioProcessor
,TrimmingAudioProcessor
andToFloatPcmAudioProcessor
public(#2339).
AudioTrack#getUnderrunCount()
inAudioTrackPositionTracker
todetect underruns in
DefaultAudioSink
instead of best-effortestimation.
audio output device.
from pause when connected to Bluetooth devices.
AnalyticsListener.onAudioPositionAdvancing
was notreporting the time when the audio started advancing but the time of the
first measurement.
some devices (#2258).
(#2059).
start at exactly the requested position.
(#2059).
ExoPlayer
API to include theMediaCodec.BUFFER_FLAG_DECODE_ONLY
flag when queuing decode-only inputbuffers. This flag will signal the decoder to skip the decode-only
buffers thereby resulting in faster seeking. Enable it with
DefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag
.lead to some additional tracks being marked as
EXCEEDS_CAPABILITIES
.(#2408).
(#2510).
later loads successfully, followed by several empty subtitle segments
(#2517).
(#2309).
error to a live stream with an empty subtitle track
(#2328).
B-frames (#2372).
CodecId = S_TEXT/SSA
in Matroskafiles. Previously
MatroskaExtractor
only supportedCodecId = S_TEXT/ASS
which is meant to represent the 'advanced' (v4+) variant ofSubStation Alpha subtitles (but ExoPlayer's parsing logic is the same
for both variants)
(#2384).
layer
property in SubStation Alpha (SSA) subtitlefiles which is used to define the z-order of cues when more than one is
shown on screen at the same time
(#2124).
Timeline
toMetadataRetriever
and migrated it to an instance-based,AutoCloseable
API. Use the newBuilder
to create an instance for aMediaItem
, then callretrieveTrackGroups()
,retrieveTimeline()
,and
retrieveDurationUs()
to getListenableFuture
s for the metadata.The previous static methods are now deprecated
(#2462).
BitmapFactoryImageDecoder
, to avoid an app crashing withCanvas: trying to draw too large bitmap.
fromPlayerView
when trying todisplay very large (e.g. 50MP) images.
DefaultRenderersFactory.getImageDecoderFactory()
to take aContext
parameter.
CompositionPlayer
with thatalready used in
Transformer
(meaningCompositionPlayer
does notconsider the display size when decoding bitmaps, unlike
ExoPlayer
).OfflineLicenseHelper.newWidevineInstance
acceptinga
MediaItem.DrmConfiguration
so that HTTP request headers can beapplied correctly
(#2169).
Presentation.createForShortSide(int)
that creates aPresentation
that ensures the shortest side always matches the given value,
regardless of input orientation.
fragmented MP4.
writeSampleData()
API now uses muxer specificBufferInfo
classinstead of
MediaCodec.BufferInfo
.Muxer.Factory#supportsWritingNegativeTimestampsInEditList
whichdefaults to false.
another ad group.
Ads groups with a start time after the window are not enqueued into the
MediaPeriodQueue
anymore(#2215).
controllers are ignored.
legacy
MediaBrowserServiceCompat
. This is in parity with the behaviorof legacy controllers/browsers when connected to a legacy app.
treated as a persistent custom exception. This prevents the application
from recovering.
session may cause
IllegalStateExceptions
.leave the controller in an invalid state.
(#2330).
setSessionExtras
from the main thread whenrunning the player from a different application thread then the main
thread caused an
IllegalStateException
(#2265).
items without preparing or playing them
(#2423https://github.com/androidx/media/issues/2423). This behavior
is configurable via
MediaSessionService.setShowNotificationForIdlePlayer
.PlaybackException
for all or selected controllers.MediaController
can causean
IllegalArgumentException
.seek in the current item for platform media controllers, to avoid
position artefacts in the Android Auto UI (and other controllers using
this information from the platform media session)
(#1758).
getLibraryRoot
of aMediaBrowser
connected to a legacy
MediaBrowserServiceCompat
produced aNullPointerException
.request crashed the legacy session app with a
ClassNotFoundException
.MediaItem.LocalConfiguration.uri
was shared to theplatform sessions's
MediaMetadata
. To intentionally share a URI toallow controllers to re-request the media, set
MediaItem.RequestMetadata.mediaUri
instead.PlayerSurface
inside re-usable components likeLazyColumn
didn't work correctly(#2493).
button states and observing the change in state (e.g. icon shapes or
being enabled). Any changes made to the Player outside of the
observation period are now picked up
(#2313).
media3-ui-compose
module forSeekBackButtonState
andSeekForwardButtonState
.PlayerControlView
. Whenenabled, this puts the player into scrubbing mode when the user starts
dragging the scrubber bar, issues a
player.seekTo
call for everymovement, and then exits scrubbing mode when the touch is lifted from
the screen. This integration can be enabled with either
time_bar_scrubbing_enabled = true
in XML or thesetTimeBarScrubbingEnabled(boolean)
method from Java/Kotlin.PlayerSurface
accept a nullablePlayer
argument.progressive stream with
DownloadHelper
, and request aDownloadRequest
from the helper with specifying the time-based mediastart and end positions that the download should cover. The returned
DownloadRequest
carries the resolved byte range, with which aProgressiveDownloader
can be created and download the contentcorrespondingly.
DownloadHelper.Factory
with which the staticDownloadHelper.forMediaItem()
methods are replaced.Factory
forSegmentDownloader
implementations.adaptive stream with
DownloadHelper
, and request aDownloadRequest
from the helper with specifying the time-based media start and end
positions that the download should cover. The returned
DownloadRequest
carries the resolved time range, with which a concrete
SegmentDownloader
can be created and download the contentcorrespondingly.
(#5975).
HlsSampleStreamWrapper
attempts to seek inside bufferwhen there are no chunks available in the buffer
#2598.
and preload hints can cause playback to get stuck or freeze
(#2299).
CAN-BLOCK-RELOAD=YES
is not honored by the server(#2317).
before a mid roll and asset list resolution was attempted for the wrong
ad (#2558).
\f
(form feed) in quoted stringattribute values
(#2420).
(#2427).
live stream runs out of segments to load
(#2401https://github.com/androidx/media/issues/2401).
are grouped already
(#1666).
HlsInterstitialsAdsLoader
.adaptation set to form an invalid
TrackGroup
(#2148).
when samples beyond the new duration have already been read by the
rendering pipeline
(#2440).
(#2475).
7798#4.4.2 (#2413).
RtspClient
to use the location uri as provided when processing anHTTP 302 response
(#2398).
trailing whitespace characters
(#2357).
DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChange
has no effect for audio decoder extensions
(#2258).
setVolume()
, andgetVolume()
(#2279).
empty.
getDeviceVolume()
,setDeviceVolume()
,getDeviceMuted()
, andsetDeviceMuted()
(#2089).
advance(player).untilPositionAtLeast
anduntilMediaItemIndex
toTestPlayerRunHelper
in order to advance the player until a specifiedposition is reached. In most cases, these methods are more reliable than
the existing
untilPosition
anduntilStartOfMediaItem
methods.FakeDownloader
totest-utils-robolectric
module for reuse inother tests.
transformer.TestUtil.addAudioDecoders(String...)
,transformer.TestUtil.addAudioEncoders(String...)
, andtransformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, String...)
. UseShadowMediaCodecConfig
to configure shadow encodersand decoders instead.
ShadowMediaCodecConfig
.SegmentDownloader
constructorSegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor)
and the corresponding constructors in its subclassesDashDownloader
,HlsDownloader
andSsDownloader
.Player.hasNext()
,Player.hasNextWindow()
. UsePlayer.hasNextMediaItem()
instead.Player.next()
. UsePlayer.seekToNextMediaItem()
instead.
Player.seekToPreviousWindow()
. UsePlayer.seekToPreviousMediaItem()
instead.Player.seekToNextWindow()
. UsePlayer.seekToNextMediaItem()
instead.BaseAudioProcessor
inexoplayer
module. UseBaseAudioProcessor
undercommon
module.MediaCodecVideoRenderer
constructorMediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @​Nullable Handler, @​Nullable VideoRendererEventListener, int, float, @​Nullable VideoSinkProvider)
.Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR was generated by Mend Renovate. View the repository job log.