Releases: androidx/media
Releases · androidx/media
1.1.1
This release corresponds to the ExoPlayer 2.19.1 release.
This release includes the following changes since the 1.1.0 release:
- Common Library:
- Remove accidentally added
multidexdependency from all modules (#499).
- Remove accidentally added
- ExoPlayer:
- Fix issue in
PlaybackStatsListenerwhere spuriousPlaybackStatsare created after the playlist is cleared. - Add additional fields to Common Media Client Data (CMCD) logging: streaming format (sf), stream type (st), version (v), top birate (tb), object duration (d), measured throughput (mtp) and object type (ot) (#8699).
- Fix issue in
- Audio:
- Fix a bug where
Player.getState()never transitioned toSTATE_ENDEDwhen playing very short files (#538).
- Fix a bug where
- Audio Offload:
- Prepend Ogg ID Header and Comment Header Pages to bitstream for offloaded Opus playback in accordance with RFC 7845.
- Video:
- H.265/HEVC: Fix parsing SPS short and long term reference picture info.
- Text:
- CEA-608: Change cue truncation logic to only consider visible text. Previously indent and tab offset were included when limiting the cue length to 32 characters (which was technically correct by the spec) (#11019).
- IMA extension:
- Bump IMA SDK version to 3.30.3.
- Session:
- Add custom layout to the state of the controller and provide a getter to access it. When the custom layout changes,
MediaController.Listener.onCustomLayoutChangedis called. Apps that want to send different custom layouts to different Media3 controller can do this inMediaSession.Callback.onConnectby using anAcceptedResultBuilderto make sure the custom layout is available to the controller when connection completes. - Fix cases where
MediaLibraryServiceLegacyStubsent an error to aResultthat didn't support this which produced anUnsupportedOperationException(#78). - Fix the way
PlayerWrappercreates aVolumeProviderCompatby determiningvolumeControlTypethrough both legacy commands (COMMAND_ADJUST_DEVICE_VOLUMEandCOMMAND_SET_DEVICE_VOLUME) and new commands (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGSandCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS) (#554).
- Add custom layout to the state of the controller and provide a getter to access it. When the custom layout changes,
1.1.0
This release corresponds to the ExoPlayer 2.19.0 release.
This release contains the following changes since the 1.0.2 release:
- Common Library:
- Add suppression reason for unsuitable audio route and play when ready change reason for suppressed too long. (#15).
- Add commands to Player:
COMMAND_GET_METADATACOMMAND_SET_PLAYLIST_METADATACOMMAND_SET_DEVICE_VOLUME_WITH_FLAGSCOMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- Add overloaded methods to Player which allow users to specify volume flags:
void setDeviceVolume(int, int)void increaseDeviceVolume(int)void decreaseDeviceVolume(int)void setDeviceMuted(boolean, int)
- Add
BuilderforDeviceInfoand deprecate existing constructor. - Add
DeviceInfo.routingControllerIdto specify the routing controller ID for remote playbacks. - Add
Player.replaceMediaItem(s)as a shortcut to adding and removing items at the same position (#8046).
- ExoPlayer:
- Allow ExoPlayer to have control of device volume methods only if explicitly opted in. Use
ExoPlayer.Builder.setDeviceVolumeControlEnabledto have access to:getDeviceVolume()isDeviceMuted()setDeviceVolume(int)andsetDeviceVolume(int, int)increaseDeviceVolume(int)andincreaseDeviceVolume(int, int)decreaseDeviceVolume(int)anddecreaseDeviceVolume(int, int)
- Add
FilteringMediaSourcethat allows to filter available track types from aMediaSource. - Add support for including Common Media Client Data (CMCD) in the outgoing requests of adaptive streaming formats DASH, HLS, and SmoothStreaming. The following fields,
br,bl,cid,rtp, andsid, have been incorporated (#8699). API structure and API methods:- CMCD logging is disabled by default, use
MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)to enable it. - All keys are enabled by default, override
CmcdConfiguration.RequestConfig.isKeyAllowed(String key)to filter out which keys are logged. - Override
CmcdConfiguration.RequestConfig.getCustomData()to enable custom key logging.
- CMCD logging is disabled by default, use
- Add additional action to manifest of main demo to make it easier to start the demo app with a custom
*.exolist.jsonfile (#439). - Add
ExoPlayer.setVideoEffects()for usingEffectduring video playback. - Update
SampleQueueto storesourceIdas alongrather than anint. This changes the signatures of public methodsSampleQueue.sourceIdandSampleQueue.peekSourceId. - Add parameters to
LoadControlmethodsshouldStartPlaybackandonTracksSelectedthat allow associating these methods with the relevantMediaPeriod. - Change signature of
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)by adding a timeline parameter that contains the periods with the UIDs used as keys in the map. This is required to avoid concurrency issues with multi-period live streams. - Deprecate
EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)andBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs). The variant of the methods without themediaTimeOffsetUscan be called instead. Note that even for the deprecated variants, the offset is not anymore added tostartTimeUsandendTimeUsof theMediaLoadDataobjects that are dispatched by the dispatcher. - Rename
ExoTrackSelection.blacklisttoexcludeTrackandisBlacklistedtoisTrackExcluded. - Fix inconsistent behavior between
ExoPlayer.setMediaItem(s)andaddMediaItem(s)when called on an empty playlist.
- Allow ExoPlayer to have control of device volume methods only if explicitly opted in. Use
- Transformer:
- Remove
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory). UseExoPlayerAssetLoader.Factory(MediaSource.Factory)andTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory)instead. - Remove
Transformer.startTransformation(MediaItem, ParcelFileDescriptor). - Fix a bug where transformation could get stuck (leading to muxer timeout) if the end of the video stream was signaled at the moment when an input frame was pending processing.
- Query codecs via
MediaCodecListinstead of usingfindDecoder/EncoderForFormatutilities, to expand support. - Remove B-frame configuration in
DefaultEncoderFactorybecause it doesn't work on some devices.
- Remove
- Track selection:
- Add
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChangewhich is disabled by default. When enabled, theDefaultTrackSelectorwill trigger a new track selection when the renderer capabilities changed.
- Add
- Extractors:
- Audio:
- Fix bug where some playbacks fail when tunneling is enabled and
AudioProcessorsare active, e.g. for gapless trimming (#10847). - Encapsulate Opus frames in Ogg packets in direct playbacks (offload).
- Extrapolate current position during sleep with offload scheduling.
- Add
Renderer.release()andAudioSink.release()for releasing the resources at the end of player's lifecycle. - Listen to audio capabilities changes in
DefaultAudioSink. Add a required parametercontextin the constructor ofDefaultAudioSink, with which theDefaultAudioSinkwill register as the listener to theAudioCapabilitiesReceiverand update itsaudioCapabilitiesproperty when informed with a capabilities change. - Propagate audio capabilities changes via a new event
onAudioCapabilitiesChangedinAudioSink.Listenerinterface, and a new interfaceRendererCapabilities.Listenerwhich triggersonRendererCapabilitiesChangedevents. - Add
ChannelMixingAudioProcessorfor applying scaling/mixing to audio channels. - Add new int value
DISCARD_REASON_AUDIO_BYPASS_POSSIBLEtoDecoderDiscardReasonsto discard audio decoder when bypass mode is possible after audio capabilities change. - Add direct playback support for DTS Express and DTS:X (#335).
- Fix bug where some playbacks fail when tunneling is enabled and
- Video:
- Make
MediaCodecVideoRendererreport aVideoSizewith a width and height of 0 when the renderer is disabled.Player.Listener.onVideoSizeChangedis called accordingly whenPlayer.getVideoSize()changes. With this change, ExoPlayer's video size withMediaCodecVideoRendererhas a width and height of 0 whenPlayer.getCurrentTracksdoes not support video, or the size of the supported video track is not yet determined.
- Make
- DRM:
- Reduce the visibility of several internal-only methods on
DefaultDrmSessionthat aren't expected to be called from outside the DRM package:void onMediaDrmEvent(int)void provision()void onProvisionCompleted()onProvisionError(Exception, boolean)
- Reduce the visibility of several internal-only methods on
- Muxer:
- Add a new muxer library which can be used to create an MP4 container file.
- IMqA extension:
- Enable multi-period live DASH streams for DAI. Please note that the current implementation does not yet support seeking in live streams (#10912).
- Fix a bug where a new ad group is inserted in live streams because the calculated content position in consecutive timelines varies slightly.
- Session:
- Add helper method
MediaSession.getControllerForCurrentRequestto obtain information about the controller that is currently calling aPlayermethod. - Add
androidx.media3.session.MediaButtonReceiverto enable apps to implement playback resumption with media button events sent by, for example, a Bluetooth headset (#167). - Add default implementation to
MediaSession.Callback.onAddMediaItemsto allow requestedMediaItemsto be passed ontoPlayerif they haveLocalConfiguration(e.g. URI) (#282). - Add "seek to previous" and "seek to next" command buttons on compact media notification view by default for Android 12 and below (#410).
- Add helper method
- UI:
- Add Util methods
shouldShowPlayButtonandhandlePlayPauseButtonActionto write custom UI elements with a play/pause button.
- Add Util methods
- RTSP Extension:
- DASH Extension:
- Remove the media time offset from
MediaLoadData.startTimeMsandMediaLoadData.endTimeMsfor multi period DASH streams. - Fix a bug where re-preparing a multi-period live Dash media source produced a
IndexOutOfBoundsException(#10838).
- Remove the media time offset from
- HLS Extension:
- Add
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)to set a timeout for the loading thread to wait for theTimestampAdjusterto initialize. If the initialization doesn't complete before the timeout, aPlaybackExceptionis thro...
- Add
1.1.0-rc01
This release includes the following changes since 1.1.0-beta01:
- ExoPlayer:
- Add support for including Common Media Client Data (CMCD) in the outgoing requests of adaptive streaming formats DASH, HLS, and SmoothStreaming. The following fields,
br,bl,cid,rtp, andsid, have been incorporated (#8699). API structure and API methods:- CMCD logging is disabled by default, use
MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)to enable it. - All keys are enabled by default, override
CmcdConfiguration.RequestConfig.isKeyAllowed(String key)to filter out which keys are logged. - Override
CmcdConfiguration.RequestConfig.getCustomData()to enable custom key logging.
- CMCD logging is disabled by default, use
- Add additional action to manifest of main demo to make it easier to start the demo app with a custom
*.exolist.jsonfile (#439).
- Add support for including Common Media Client Data (CMCD) in the outgoing requests of adaptive streaming formats DASH, HLS, and SmoothStreaming. The following fields,
- Extractors:
- FMP4: Fix issue where
TimestampAdjusterinitializes a wrong timestamp offset with metadata sample time from emsg atom (#356).
- FMP4: Fix issue where
1.1.0-beta01
- Common Library:
- Add
Player.replaceMediaItem(s)as a shortcut to adding and removing items at the same position (#8046).
- Add
- ExoPlayer:
- Add
FilteringMediaSourcethat allows to filter available track types from aMediaSource. - Allow ExoPlayer to have control of device volume methods only if
explicitly opted in. Use
ExoPlayer.Builder.setDeviceVolumeControlEnabledto have access to:getDeviceVolume()isDeviceMuted()setDeviceVolume(int)andsetDeviceVolume(int, int)increaseDeviceVolume(int)andincreaseDeviceVolume(int, int)decreaseDeviceVolume(int)anddecreaseDeviceVolume(int, int)
- Add
- Extractors:
- Ogg: Fix bug when seeking in files with a long duration (#391).
- Audio:
- Add direct playback support for DTS Express and DTS:X (#335).
- Video:
- Make
MediaCodecVideoRendererreport aVideoSizewith a width and height of 0 when the renderer is disabled.Player.Listener.onVideoSizeChangedis called accordingly whenPlayer.getVideoSize()changes. With this change, ExoPlayer's video size withMediaCodecVideoRendererhas a width and height of 0 whenPlayer.getCurrentTracksdoes not support video, or the size of the supported video track is not yet determined.
- Make
- IMA extension:
- Enable multi-period live DASH streams for DAI. Please note that the current implementation does not yet support seeking in live streams (#10912).
- Session:
- Add
androidx.media3.session.MediaButtonReceiverto enable apps to implement playback resumption with media button events sent by, for example, a Bluetooth headset (#167).
- Add
- RTSP Extension:
- Use base Uri for relative path resolution from the RTSP session if present in DESCRIBE response header (#11160).
- Remove deprecated symbols:
- Remove two deprecated
SimpleCacheconstructors, use a non-deprecated constructor that takes aDatabaseProviderinstead for better performance. - Remove
DefaultBandwidthMeterconstructor, useDefaultBandwidthMeter.Builderinstead. - Remove
DefaultDrmSessionManagerconstructors, useDefaultDrmSessionManager.Builderinstead. - Remove two deprecated
HttpDataSource.InvalidResponseCodeExceptionconstructors, use a non-deprecated constructor that accepts additional fields(cause,responseBody) to enhance error logging. - Remove
DownloadHelper.forProgressive,DownloadHelper.forHls,DownloadHelper.forDash, andDownloadHelper.forSmoothStreaming, useDownloadHelper.forMediaIteminstead. - Remove deprecated
DownloadServiceconstructor, use a non deprecated constructor that includes the option to provide achannelDescriptionResourceIdparameter. - Remove deprecated String constants for Charsets (
ASCII_NAME,UTF8_NAME,ISO88591_NAME,UTF16_NAMEandUTF16LE_NAME), use Kotlin Charsets from thekotlin.textpackage, thejava.nio.charset.StandardCharsetsor thecom.google.common.base.Charsetsinstead. - Remove deprecated
WorkManagerSchedulerconstructor, use a non deprecated constructor that includes the option to provide aContextparameter instead. - Remove the deprecated methods
createVideoSampleFormat,createAudioSampleFormat,createContainerFormat, andcreateSampleFormat, which were used to instantiate theFormatclass. Instead useFormat.Builderfor creating instances ofFormat. - Remove the deprecated methods
copyWithMaxInputSize,copyWithSubsampleOffsetUs,copyWithLabel,copyWithManifestFormatInfo,copyWithGaplessInfo,copyWithFrameRate,copyWithDrmInitData,copyWithMetadata,copyWithBitrateandcopyWithVideoSize, useFormat.buildUpon()and setter methods instead. - Remove deprecated
ExoPlayer.retry(), useprepare()instead. - Remove deprecated zero-arg
DefaultTrackSelectorconstructor, useDefaultTrackSelector(Context)instead. - Remove deprecated
OfflineLicenseHelperconstructor, useOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)instead. - Remove deprecated
DownloadManagerconstructor, use the constructor that takes anExecutorinstead. - Remove deprecated
Cueconstructors, useCue.Builderinstead. - Remove deprecated
OfflineLicenseHelperconstructor, useOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)instead. - Remove four deprecated
AnalyticsListenermethods:onDecoderEnabled, useonAudioEnabledand/oronVideoEnabledinstead.onDecoderInitialized, useonAudioDecoderInitializedand/oronVideoDecoderInitializedinstead.onDecoderInputFormatChanged, useonAudioInputFormatChangedand/oronVideoInputFormatChangedinstead.onDecoderDisabled, useonAudioDisabledand/oronVideoDisabledinstead.
- Remove the deprecated
Player.Listener.onSeekProcessedandAnalyticsListener.onSeekProcessed, useonPositionDiscontinuitywithDISCONTINUITY_REASON_SEEKinstead. - Remove
ExoPlayer.setHandleWakeLock(boolean), usesetWakeMode(int)instead. - Remove deprecated
DefaultLoadControl.Builder.createDefaultLoadControl(), usebuild()instead.
- Remove two deprecated
1.0.2
This release corresponds to the ExoPlayer 2.18.7 release.
This release contains the following changes since the 1.0.1 release:
- Core library:
- Add
Buffer.isLastSample()that denotes ifBuffercontains flagC.BUFFER_FLAG_LAST_SAMPLE. - Fix issue where last frame may not be rendered if the last sample with frames is dequeued without reading the 'end of stream' sample. (#11079).
- Add
- Extractors:
- Fix parsing of H.265 SPS in MPEG-TS files by re-using the parsing logic already used by RTSP and MP4 extractors (#303).
- Text:
- SSA: Add support for UTF-16 files if they start with a byte order mark (#319).
- Session:
- Fix issue where
MediaControllerdoesn't update its available commands when connected to a legacyMediaSessionCompatthat updates its actions. - Fix bug that prevented the
MediaLibraryServicefrom returning null for a call from System UI toCallback.onGetLibraryRootwithparams.isRecent == trueon API 30 (#355). - Fix memory leak of
MediaSessionServiceorMediaLibraryService(#346). - Fix bug where a combined
Timelineand position update in aMediaSessionmay cause aMediaControllerto throw anIllegalStateException.
- Fix issue where
1.1.0-alpha01
- Core library:
- Add suppression reason for unsuitable audio route and play when ready change reason for suppressed too long. (#15).
- Add
ExoPlayer.setVideoEffects()for usingEffectduring video playback. - Update
SampleQueueto storesourceIdas alongrather than anint. This changes the signatures of public methodsSampleQueue.sourceIdandSampleQueue.peekSourceId. - Add parameters to
LoadControlmethodsshouldStartPlaybackandonTracksSelectedthat allow associating these methods with the relevantMediaPeriod. - Change signature of
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)by adding a timeline parameter that contains the periods with the UIDs used as keys in the map. This is required to avoid concurrency issues with multi-period live streams. - Deprecate
EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)andBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs). The variant of the methods without themediaTimeOffsetUscan be called instead. Note that even for the deprecated variants, the offset is not anymore added tostartTimeUsandendTimeUsof theMediaLoadDataobjects that are dispatched by the dispatcher. - Rename
ExoTrackSelection.blacklisttoexcludeTrackandisBlacklistedtoisTrackExcluded. - Deprecate
Player.COMMAND_GET_MEDIA_ITEMS_METADATAandCOMMAND_SET_MEDIA_ITEMS_METADATA. UseCOMMAND_GET_METADATAandCOMMAND_SET_PLAYLIST_METADATAinstead. - Add
Buffer.isLastSample()that denotes ifBuffercontains flagC.BUFFER_FLAG_LAST_SAMPLE. - Fix issue where last frame may not be rendered if the last sample with frames is dequeued without reading the 'end of stream' sample. (#11079).
- Add
BuilderforDeviceInfoand deprecate existing constructor. - Add
DeviceInfo.routingControllerIdto specify the routing controller ID for remote playbacks. - Fix inconsistent behavior between
ExoPlayer.setMediaItem(s)andaddMediaItem(s)when called on an empty playlist.
- Extractors:
- Fix parsing of H.265 SPS in MPEG-TS files by re-using the parsing logic already used by RTSP and MP4 extractors (#303).
- Session:
- Deprecate 4 volume-controlling methods in
Playerand add overloaded methods which allow users to specify volume flags:void setDeviceVolume(int, int)void increaseDeviceVolume(int)void decreaseDeviceVolume(int)void setDeviceMuted(boolean, int)
- Fix issue where
MediaControllerdoesn't update its available commands when connected to a legacyMediaSessionCompatthat updates its actions. - Add helper method
MediaSession.getControllerForCurrentRequestto obtain information about the controller that is currently calling aPlayermethod. - Fix bug that prevented the
MediaLibraryServicefrom returning null for a call from System UI toCallback.onGetLibraryRootwithparams.isRecent == trueon API 30 (#355). - Fix memory leak of
MediaSessionServiceorMediaLibraryService(#346).
- Deprecate 4 volume-controlling methods in
- UI:
- Add Util methods
shouldShowPlayButtonandhandlePlayPauseButtonActionto write custom UI elements with a play/pause button.
- Add Util methods
- Track selection:
- Add
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChangewhich is disabled by default. When enabled, theDefaultTrackSelectorwill trigger a new track selection when the renderer capabilities changed.
- Add
- Audio:
- Fix bug where some playbacks fail when tunneling is enabled and
AudioProcessorsare active, e.g. for gapless trimming (#10847). - Encapsulate Opus frames in Ogg packets in direct playbacks (offload).
- Extrapolate current position during sleep with offload scheduling.
- Add
Renderer.release()andAudioSink.release()for releasing the resources at the end of player's lifecycle. - Listen to audio capabilities changes in
DefaultAudioSink. Add a required parametercontextin the constructor ofDefaultAudioSink, with which theDefaultAudioSinkwill register as the listener to theAudioCapabilitiesReceiverand update itsaudioCapabilitiesproperty when informed with a capabilities change. - Propagate audio capabilities changes via a new event
onAudioCapabilitiesChangedinAudioSink.Listenerinterface, and a new interfaceRendererCapabilities.Listenerwhich triggersonRendererCapabilitiesChangedevents. - Add
ChannelMixingAudioProcessorfor applying scaling/mixing to audio channels. - Add new int value
DISCARD_REASON_AUDIO_BYPASS_POSSIBLEtoDecoderDiscardReasonsto discard audio decoder when bypass mode is possible after audio capabilities change.
- Fix bug where some playbacks fail when tunneling is enabled and
- Metadata:
- Deprecate
MediaMetadata.folderTypein favor ofisBrowsableandmediaType.
- Deprecate
- DRM:
- Reduce the visibility of several internal-only methods on
DefaultDrmSessionthat aren't expected to be called from outside the DRM package:void onMediaDrmEvent(int)void provision()void onProvisionCompleted()onProvisionError(Exception, boolean)
- Reduce the visibility of several internal-only methods on
- Transformer:
- Remove
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory). UseExoPlayerAssetLoader.Factory(MediaSource.Factory)andTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory)instead. - Remove
Transformer.startTransformation(MediaItem, ParcelFileDescriptor). - Fix a bug where transformation could get stuck (leading to muxer timeout) if the end of the video stream was signaled at the moment when an input frame was pending processing.
- Query codecs via
MediaCodecListinstead of usingfindDecoder/EncoderForFormatutilities, to expand support. - Remove B-frame configuration in
DefaultEncoderFactorybecause it doesn't work on some devices.
- Remove
- Muxer:
- Add a new muxer library which can be used to create an MP4 container file.
- DASH:
- Remove the media time offset from
MediaLoadData.startTimeMsandMediaLoadData.endTimeMsfor multi period DASH streams.
- Remove the media time offset from
- RTSP:
- For MPEG4-LATM, use default profile-level-id value if absent in Describe Response SDP message (#302).
- IMA DAI extension:
- Text:
- Fix a bug where a new ad group is inserted in live streams because the calculated content position in consecutive timelines varies slightly.
- SSA: Add support for UTF-16 files if they start with a byte order mark (#319).
- Test Utilities:
- Check for URI scheme case insensitivity in
DataSourceContractTest.
- Check for URI scheme case insensitivity in
- Remove deprecated symbols:
- Remove
DefaultAudioSinkconstructors, useDefaultAudioSink.Builderinstead. - Remove
HlsMasterPlaylist, useHlsMultivariantPlaylistinstead. - Remove
Player.stop(boolean). UsePlayer.stop()andPlayer.clearMediaItems()(ifresetistrue) instead.
- Remove
1.0.1
This release corresponds to the ExoPlayer 2.18.6 release.
- Core library:
- Reset target live stream override when seeking to default position (#11051).
- Fix bug where empty sample streams in the media could cause playback to be stuck.
- Session:
- Fix bug where multiple identical queue items published by a legacy
MediaSessionCompatresult in an exception inMediaController(#290). - Add missing forwarding of
MediaSession.broadcastCustomCommandto the legacyMediaControllerCompat.Callback.onSessionEvent(#293). - Fix bug where calling
MediaSession.setPlayerdoesn't update the available commands. - Fix issue that
TrackSelectionOverrideinstances sent from aMediaControllerare ignored if they reference a group withFormat.metadata(#296). - Fix issue where
Player.COMMAND_GET_CURRENT_MEDIA_ITEMneeds to be available to access metadata via the legacyMediaSessionCompat. - Fix issue where
MediaSessioninstances on a background thread cause crashes when used inMediaSessionService(#318). - Fix issue where a media button receiver was declared by the library without the app having intended this (#314).
- Fix bug where multiple identical queue items published by a legacy
- DASH:
- Fix handling of empty segment timelines (#11014).
- RTSP:
- Retry with TCP if RTSP Setup with UDP fails with RTSP Error 461 UnsupportedTransport (#11069).
1.0.0
This release corresponds to the ExoPlayer 2.18.5 release.
There are no changes since 1.0.0-rc02.
1.0.0-rc02
This release corresponds to the ExoPlayer 2.18.4 release.
- Core library:
- Downloads:
- Make the maximum difference of the start time of two segments to be merged configurable in
SegmentDownloaderand subclasses (#248).
- Make the maximum difference of the start time of two segments to be merged configurable in
- Audio:
- Video:
- Map HEVC HDR10 format to
HEVCProfileMain10HDR10instead ofHEVCProfileMain10. - Add workaround for a device issue on Chromecast with Google TV and Lenovo M10 FHD Plus that causes 60fps AVC streams to be marked as unsupported (#10898).
- Fix frame release performance issues when playing media with a frame rate far higher than the screen refresh rate.
- Map HEVC HDR10 format to
- Cast:
- Fix transient
STATE_IDLEwhen transitioning between media items (#245).
- Fix transient
- RTSP:
- Catch the IllegalArgumentException thrown in parsing of invalid RTSP Describe response messages (#10971).
- Session:
- Fix a bug where notification play/pause button doesn't update with player state (#192).
- IMA extension:
- Fix a bug which prevented DAI streams without any ads from starting because the first (and in the case without ads the only)
LOADEDevent wasn't received.
- Fix a bug which prevented DAI streams without any ads from starting because the first (and in the case without ads the only)
1.0.0-rc01
- Core library:
- Tweak the renderer's decoder ordering logic to uphold the
MediaCodecSelector's preferences, even if a decoder reports it may not be able to play the media performantly. For example with default selector, hardware decoder with only functional support will be
preferred over software decoder that fully supports the format (#10604). - Add
ExoPlayer.Builder.setPlaybackLooperthat sets a pre-existing playback thread for a new ExoPlayer instance. - Allow download manager helpers to be cleared (#10776).
- Add parameter to
BasePlayer.seekToto also indicate the command used for seeking. - Use theme when loading drawables on API 21+ (#220).
- Add
ConcatenatingMediaSource2that allows combining multiple media items into a single window (#247).
- Tweak the renderer's decoder ordering logic to uphold the
- Extractors:
- Throw a
ParserExceptioninstead of aNullPointerExceptionif the sample table (stbl) is missing a required sample description (stsd) when parsing trak atoms. - Correctly skip samples when seeking directly to a sync frame in fMP4 (#10941).
- Throw a
- Audio:
- Use the compressed audio format bitrate to calculate the min buffer size for
AudioTrackin direct playbacks (passthrough).
- Use the compressed audio format bitrate to calculate the min buffer size for
- Text:
- Fix
TextRendererpassing an invalid (negative) index toSubtitle.getEventTimeif a subtitle file contains no cues. - SubRip: Add support for UTF-16 files if they start with a byte order mark.
- Fix
- Metadata:
- Parse multiple null-separated values from ID3 frames, as permitted by ID3 v2.4.
- Add
MediaMetadata.mediaTypeto denote the type of content or the type of folder described by the metadata. - Add
MediaMetadata.isBrowsableas a replacement forMediaMetadata.folderType. The folder type will be deprecated in the next release.
- DASH:
- Add full parsing for image adaptation sets, including tile counts (#3752).
- UI:
- Session:
- Add abstract
SimpleBasePlayerto help implement thePlayerinterface for custom players. - Add helper method to convert platform session token to Media3
SessionToken(#171). - Use
onMediaMetadataChangedto trigger updates of the platform media session (#219). - Add the media session as an argument of
getMediaButtons()of theDefaultMediaNotificationProviderand use immutable lists for clarity (#216). - Add
onSetMediaItemscallback listener to provide means to modify/setMediaItemlist, starting index and position by session before setting onto Player (#156). - Avoid double tap detection for non-Bluetooth media button events (#233).
- Make
QueueTimelinemore robust in case of a shady legacy session state (#241).
- Add abstract
- Metadata:
- Parse multiple null-separated values from ID3 frames, as permitted by ID3 v2.4.
- Add
MediaMetadata.mediaTypeto denote the type of content or the type of folder described by the metadata. - Add
MediaMetadata.isBrowsableas a replacement forMediaMetadata.folderType. The folder type will be deprecated in the next release.
- Cast extension:
- Bump Cast SDK version to 21.2.0.
- IMA extension:
- Remove player listener of the
ImaServerSideAdInsertionMediaSourceon the application thread to avoid threading issues. - Add a property
focusSkipButtonWhenAvailableto theImaServerSideAdInsertionMediaSource.AdsLoader.Builderto request focusing the skip button on TV devices and set it to true by default. - Add a method
focusSkipButton()to theImaServerSideAdInsertionMediaSource.AdsLoaderto programmatically request to focus the skip button. - Bump IMA SDK version to 3.29.0.
- Remove player listener of the
- Demo app:
- Request notification permission for download notifications at runtime (#10884).