- 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