https://github.com/google/ExoPlayer

sort by:
Revision Author Date Message Commit Date
bc35372 Merge pull request #11034 from google/release-v2-r2.18.4 r2.18.4 03 March 2023, 10:01:45 UTC
86013bd Update release notes for ExoPlayer 2.18.4 #minor-release PiperOrigin-RevId: 513555559 (cherry picked from commit 4f68f891bca4d506ea552e1389060286474a6aae) 02 March 2023, 17:58:16 UTC
c459b08 Fix lint-baseline.xml for latest UI translations #minor-release PiperOrigin-RevId: 513533248 (cherry picked from commit af6807d959ff7bb3166177b6d687d41bf937b650) 02 March 2023, 17:58:16 UTC
05ac6ab Update Javadoc for 2.18.4 PiperOrigin-RevId: 513516267 (cherry picked from commit 658b5030e45435472d490fe7280a70c0196744d4) 02 March 2023, 17:58:15 UTC
c641307 Bump version numbers to Media3 1.0.0-rc02 and ExoPlayer 2.18.4 #minor-release PiperOrigin-RevId: 513488487 (cherry picked from commit 3b16231e29e4f952e4f44a179a1e91022f7bad36) 02 March 2023, 13:54:32 UTC
4298cfa Update migration script to 1.0.0-rc02/2.18.4 PiperOrigin-RevId: 513482096 (cherry picked from commit b634005c5f69f6a5ba47f58534fd41e16e237c25) 02 March 2023, 13:54:30 UTC
d5ae16c Extend documentation for ForwardingPlayer Add some additional information which methods to override for available commands. #minor-release PiperOrigin-RevId: 513251805 (cherry picked from commit a64a9e67ca3bf34f29e525b1bdfbb73371a66ae7) 02 March 2023, 09:57:58 UTC
d3ef801 Merge pull request #255 from mayurk2:use_edts_offset_if_it_is_for_entire_file PiperOrigin-RevId: 513213229 (cherry picked from commit d2ba290746221c8bd32e32d29050c78774c83f1f) 02 March 2023, 09:57:58 UTC
a834d05 Remove @see tags with <a> tags These are not supported by Dackka #minor-release PiperOrigin-RevId: 513176533 (cherry picked from commit ef5a1ce9322352f084b992d370cad740edc43fa2) 02 March 2023, 09:57:58 UTC
bfc12ef Minor change in ForwardingPlayer javadoc #minor-release PiperOrigin-RevId: 512897269 (cherry picked from commit 48047cf9e8a75e30c3b464f2e89f9406c71b1271) 02 March 2023, 09:57:58 UTC
c23010d Update translations #minor-release PiperOrigin-RevId: 512890813 (cherry picked from commit 13a86b38334bf8e34d79762edcf139e5ab731085) 02 March 2023, 09:57:58 UTC
996d660 Ensure getPlaybackHeadPosition isn't called if not needed Once the value returned from AudioTimestampPoller advances, we only need getPlaybackHeadPosition to sample sync params and verify the returned timestamp. Both of these happen less often and we can avoid calling getPlaybackHeadPosition if we don't actually need it. PiperOrigin-RevId: 512882170 (cherry picked from commit 4cf7d3c7acc7244bcbf2998f9fdb43c100ce51e1) 02 March 2023, 09:57:58 UTC
3e7eece Fix some playback parameter signalling problems. Playback parameter signalling can be quite complex because (a) the renderer clock often has a delay before it realizes that it doesn't support a previously set speed and (b) the speed set on media clock sometimes intentionally differs from the one surfaced to the user, e.g. during live speed adjustment or when overriding ad playback speed to 1.0f. This change fixes two problems related to this signalling: 1. When resetting the media clock speed at a period transition, we don't currently tell the renderers that this happened. 2. When a delayed speed change update from the media clock is pending and the renderer for this media clock is disabled before the change can be handled, the pending update becomes stale but it still applied later and overrides any other valid speed set in the meantime. Both edge cases are also covered by extended or new player tests. Issue: google/ExoPlayer#10882 PiperOrigin-RevId: 512658918 (cherry picked from commit d363977156b49c1fe793bfc9709eb00595bfae6c) 02 March 2023, 09:57:54 UTC
38639e5 Ensure output format is updated in sync with stream changes. MediaCodecRenderer currently has two independent paths to trigger events at stream changes: 1. Detection of the last output buffer of the old stream to trigger onProcessedStreamChange and setting the new output stream offset. 2. Detection of the first input buffer of the new stream to trigger onOutputFormatChanged. Both events are identical for most media. However, there are two problematic cases: A. (1) happens after (2). This may happen if the declared media duration is shorter than the actual last sample timestamp. B. (2) is too late and there are output samples between (1) and (2). This can happen if the new media outputs samples with a timestamp less than the first input timestamp. This can be made more robust by: - Keeping a separate formatQueue for each stream to avoid case A. - Force outputting the first format after a stream change to avoid case B. Issue: google/ExoPlayer#8594 #minor-release PiperOrigin-RevId: 512586838 (cherry picked from commit a02c8d855c8eae8cb3132365548ecf7a0730815b) 28 February 2023, 18:05:48 UTC
095a0b5 Add workaround for wrong PerformancePoints on some devices. Some devices were reported to have wrong PerformancePoint sets that cause 60 fps to be marked as unsupported even though they are supported. Issue: google/ExoPlayer#10898 #minor-release PiperOrigin-RevId: 512580395 (cherry picked from commit 04f0cc949f0d524d5a8ab367a15716175bacf18f) 28 February 2023, 18:05:47 UTC
f5c6967 Correctly update output info if previous stream has been fully rendered The output info for a new stream is marked pending until the last sample of the previous stream has been processed. However, this fails if the previous stream has already been fully processed. We need to detect this case explicitly to avoid signalling the output change one sample too late. #minor-release PiperOrigin-RevId: 512572854 (cherry picked from commit 39935d7f1202a4e327b968815bf499cc7bcab4c4) 28 February 2023, 18:05:47 UTC
5862fe4 Use more realistic time values for MediaCodecVideoRendererTest This test became flaky after https://github.com/google/ExoPlayer/commit/cbb6878f9fef20ea440c6ffda77dd4edc00ce1f2 because some of the unrealistic frame times ended up on the same release time. Using realistic numbers avoids the flakiness. PiperOrigin-RevId: 512566469 (cherry picked from commit 13700e0aec06b2a7f5ed0d710690b44dbb7146bc) 28 February 2023, 18:05:47 UTC
29eeca3 Do not specify export flags for protected system broadcasts. Protected system broadcasts should not specify the export flag. Marking them as NOT_EXPORTED breaks sticky broadcasts in some cases. Issue: google/ExoPlayer#10970 #minor-release PiperOrigin-RevId: 512020154 (cherry picked from commit 34b9824201314b4fa6442deac643635f2fa9e541) 28 February 2023, 18:05:47 UTC
342ae31 Add missing variant to package transformations PiperOrigin-RevId: 512002735 (cherry picked from commit 1ef70cd6a02aabf302a7d3c37785e928d93973c3) 28 February 2023, 18:05:41 UTC
629e1c5 Use ArrayDeque for pending output stream changes. The current logic uses manual array operations to keep track of pending changes. Modernize this code by using an ArrayDeque and a data class. This also allows to extend the output stream information in the future. This also fixes a bug where a position reset accidentally assigns a pending stream offset instead of keeping the current one. PiperOrigin-RevId: 511787571 (cherry picked from commit 4e0babdcd1c272c5470572e3b29dc15e42e9221a) 28 February 2023, 18:04:42 UTC
d0c0769 Indicate that SCTE-35 metadata in not supported with HLS Issue: google/ExoPlayer#10992 #minor-release PiperOrigin-RevId: 510988140 (cherry picked from commit 57a638aa88a4b85ca9f39573bddfc9b45df11254) 28 February 2023, 18:04:03 UTC
5f91e45 Skip rendering multiple frames on the same vsync When rendering frames at a rate higher than the screen refresh rate, e.g. playing at 8x, the player is releasing multiple frames at the same release time (nanos) which are then dropped by the platform. The output buffers are available later and as a result MediaCodec cannot keep up decoding fast enough. This change skips releasing multiple video frames on the same vsync period and proactivelly drops the frame. The frame is counted as skipped rather than dropped to differentiate with frames dropped due to slow decoding. PiperOrigin-RevId: 510964976 (cherry picked from commit cbb6878f9fef20ea440c6ffda77dd4edc00ce1f2) 28 February 2023, 18:04:03 UTC
0563c43 Reduce number of calls to AudioTrack.getPlaybackHeadPosition This call may cause performance overhead in some situations, for example if the AudioTrack needs to query an offload DSP for the current position. We don't need to check this multiple times per doSomeWork iteration as the value is unlikely to change in any meaningful way. PiperOrigin-RevId: 510957116 (cherry picked from commit 829b49d724ed220e7d58397dfdf97752aac73696) 28 February 2023, 18:04:03 UTC
61a38a1 Map `PLAYER_STATE_LOADING` to `STATE_BUFFERING` #minor-release Issue: androidx/media#245 PiperOrigin-RevId: 510456793 (cherry picked from commit a231ff4fa91471c59d2ab62945603614b8c8a742) 28 February 2023, 18:04:03 UTC
52d5ff4 Add exception cause to thrown exception PiperOrigin-RevId: 509473556 (cherry picked from commit 08cf6db305d4ae26bc74769660aa3e687d7120ad) 28 February 2023, 18:04:03 UTC
89acf3c Catch IllegalArgumentExceptions in RTSP Response parsing In parsing Describe RTSP response messages, IllegalArgumentExceptions are thrown for invalid parameters and values. These exceptions were not caught and crashed the Playback thread. Now these exceptions will be caught and their errors forwarded to the proper error handling listeners. #minor-release Issue: google/ExoPlayer#10971 PiperOrigin-RevId: 509207881 (cherry picked from commit 711fa44d56678ebdb5c1c3a48f940fa71810c510) 28 February 2023, 18:04:03 UTC
65f2e16 Add ad event listeners in the Looper event of the ad manager callback #minor-release PiperOrigin-RevId: 509189206 (cherry picked from commit e98670e2f94a04d90f6ec7188f748eb1c31fb09f) 28 February 2023, 18:04:03 UTC
aeff51c AsynchronousMediaCodecAdapter: surface queueing errors sooner The AsynchronousMediaCodecAdapter's queuing thread stores any exceptions raised by MediaCodec and re-throws them on the next call to queueInputBuffer()/queueSecureInputBuffer(). However, if MediaCodec raises and error while queueing, it goes into a failed state and does not announce available input buffers. If there is no input available input buffer, the MediaCodecRenderer will never call queueInputBuffer()/queueSecureInputBuffer(), hence playback is stalled. This change surfaces the queueing error through the adapter's dequeueing methods. PiperOrigin-RevId: 508637346 (cherry picked from commit a5f4651d555de8c5e99405b002bcf536cae4567e) 28 February 2023, 18:04:03 UTC
2794992 Add null check to `ExoPlayerImpl.isTunnelingEnabled` `TrackSelectorResult.rendererConfigurations` can contain null elements: > A null entry indicates the corresponding renderer should be disabled. This wasn't caught by the nullness checker because `ExoPlayerImpl` is currently excluded from analysis. #minor-release Issue: google/ExoPlayer#10977 PiperOrigin-RevId: 508619169 (cherry picked from commit 5e3cd7a3c3f2cd590d77ccd318c5ba4824f414b8) 28 February 2023, 18:04:03 UTC
58650b8 Document spatialization behavior constants. PiperOrigin-RevId: 508602059 (cherry picked from commit 1c29131016c9d140ca40d7f1b9038eeffb343bf7) 28 February 2023, 18:04:03 UTC
3bd0896 Merge pull request #10959 from balachandarlinks:handle-sql-exception-in-cached-content-index PiperOrigin-RevId: 508323432 (cherry picked from commit 20a5e468f449e29ecb6f3bd55cc8526fff74acda) 28 February 2023, 18:04:02 UTC
3dcdfe5 Merge pull request #248 from lemondoglol:update-segment-size PiperOrigin-RevId: 507784608 (cherry picked from commit 08342ea9da96240c87e3e7c486eec0b0929138da) 28 February 2023, 18:04:02 UTC
bc9f2be Fix AudioTrackPositionTracker logic for playback speed adjustments The AudioTrackPositionTracker needs to correct positions by the speed set on the AudioTrack itself whenever it makes estimations based on real-time (=the real-time playout duration is not equal to the media duration played). This happens for the main playback path already, but not for the mode in which the position is estimated from the playback head position and also not in the phase after the track has been stopped. Both cases are not very noticeable during normal playback, but become relevant when playing in offload mode. PiperOrigin-RevId: 507736408 (cherry picked from commit 4ede931c2a7ad11003194cb0ee638535ecab7f31) 28 February 2023, 18:04:02 UTC
8f1aeca Detect HEVC HDR10 codec profile more accurately In MediaCodecUtil, use Format.colorInfo, besides the codec string, to accurately map to a 10bit HEVC profile. PiperOrigin-RevId: 507500071 (cherry picked from commit 80dbaca0e520c32a599a379feedb49e6bed3de30) 28 February 2023, 18:04:02 UTC
f72ca83 Merge pull request #10995 from google/release-v2-r2.18.3 r2.18.3 16 February 2023, 17:03:04 UTC
68ca399 Update javadoc for ExoPlayer 2.18.3 #minor-release PiperOrigin-RevId: 509867431 (cherry picked from commit 482871fed4fc84009f6d11af3ad4650bc65cd4bc) 16 February 2023, 10:30:06 UTC
57bd861 Update javadoc for ExoPlayer 2.18.3 #minor-release PiperOrigin-RevId: 509864205 (cherry picked from commit 19d4a588295894fb5d5777e0d12a87cd2c9fc5d5) 16 February 2023, 10:30:06 UTC
f5d442f Update javadoc for ExoPlayer 2.18.3 #minor-release PiperOrigin-RevId: 509789955 (cherry picked from commit 4759e0075c4a4ac2fe8892147fed1ac341b48c0d) 15 February 2023, 12:55:55 UTC
7dbc2d4 Version bump for ExoPlayer 2.18.3 & media3-1.0.0-rc01 #minor-release PiperOrigin-RevId: 509501665 (cherry picked from commit b18dccde2a1984562ee42e9b058d4a23451b607d) 14 February 2023, 18:54:59 UTC
f731a46 Update release notes for ExoPlayer 2.18.3 #minor-release PiperOrigin-RevId: 509246479 (cherry picked from commit 8ff024e4c0e3d2085b2c690daddd64b53ca448ad) 14 February 2023, 18:54:59 UTC
7269d2a Publish ConcatenatingMediaSource2 Can be used to combine multiple media items into a single timeline window. Issue: androidx/media#247 Issue: google/ExoPlayer#4868 PiperOrigin-RevId: 506283307 (cherry picked from commit eb8fffba15810b8206653d8ffaff233d823fbfc9) 02 February 2023, 16:47:22 UTC
76e8740 Merge pull request #10793 from fraunhoferfokus:dash-thumbnail-support PiperOrigin-RevId: 506261584 (cherry picked from commit 107e0c6e42c6fd080b1be19e5305597cf880a9dd) 02 February 2023, 16:47:22 UTC
4dfa7ca Fix (another) `LeanbackPlayerAdapter` param name mismatch I missed this when fixing `positionInMs` for Dackka in https://github.com/google/ExoPlayer/commit/d2a3d8f6fabb6d22ac28a76379725d0915344cba This time I manually verified that all the `@Override` methods have parameter names that match [the docs](https://developer.android.com/reference/androidx/leanback/media/PlayerAdapter). #minor-release PiperOrigin-RevId: 506017063 (cherry picked from commit 736f090cce540de78a968e62fd8c5aec413e8122) 02 February 2023, 13:18:47 UTC
284bf97 Fix timestamp comparison for seeks in fMP4 When seeking in fMP4, we try to extract as little samples as possible by only starting at the preceding sync frame. This comparison should use <= to allow sync frames at exactly the seek position. Issue: google/ExoPlayer#10941 #minor-release PiperOrigin-RevId: 505098172 (cherry picked from commit ac3017b5805cb98b4292e4bbe1f7181f47684b88) 02 February 2023, 13:18:47 UTC
ace97fa Match MergingMediaPeriod track selection by period index in id MergingMediaPeriod creates its track groups with ids concatenating position in its periods array and the underlying child track group id. The ids can be used in selectTracks for matching to periods list. Issue: google/ExoPlayer#10930 PiperOrigin-RevId: 505074653 (cherry picked from commit ee055ef004686ddb3844666f9506a95c6e16a59f) 02 February 2023, 13:18:46 UTC
b9bb323 Tweak UI behavior when commands are missing. For most missing commands, we already disable the corresponding controls. This change extends this to more UI elements that are disabled in case the corresponding action is unavailable. #minor-release PiperOrigin-RevId: 505057751 (cherry picked from commit 641c3b1b22cc67133151b7af9905473485b0f51c) 02 February 2023, 13:18:46 UTC
5350d06 Add missing command checks in UI module The commands are partly checked already before enabling features or calling player methods, but the checks were still missing in many places. #minor-release PiperOrigin-RevId: 504589888 (cherry picked from commit 2d7ddccebb959051ae4a284e9c9380cc3582c411) 26 January 2023, 14:28:06 UTC
3bb3c60 Document two limitations with subtitle sideloading #minor-release PiperOrigin-RevId: 504517946 (cherry picked from commit f083ff264db8af76a1c9bb14bd72913b2fbb8fe2) 26 January 2023, 14:28:06 UTC
26c8c55 Suppress warnings in ImaUtil ImaUtil calls VideoProgressUpdate.equals() which is annotated as hidden, which causes lint errors with gradle. #minor-release PiperOrigin-RevId: 504306210 (cherry picked from commit f86948f01c2397b9f53ef598e311e2de9055118e) 26 January 2023, 14:28:06 UTC
92686b3 Minor fix in transforming-media.md PiperOrigin-RevId: 504281747 (cherry picked from commit 4c1be4c7a1eed2eec714cfaf854683c21dbfec93) 26 January 2023, 14:27:46 UTC
128fed8 Undo unreleased changes from transforming-media.md The "Transforming media" page has been updated with changes that won't be part of the next release. Undo these changes so that this page is consistent with the latest release. PiperOrigin-RevId: 503917637 (cherry picked from commit fdf866617f39261f6b619dd69f56279505ae7466) 25 January 2023, 18:29:36 UTC
197109e Explicitly document most Player.Listener methods in terms of getters This makes it implicitly clear that if the value of a getter changes due to a change in command availability then the listener will be invoked, without needing to explicitly document every command on every listener method. #minor-release PiperOrigin-RevId: 503178383 (cherry picked from commit aa23920e148191f36b4d9f9d1fd9924e13855762) 25 January 2023, 18:29:36 UTC
b169386 Extend command GET_CURRENT_MEDIA_ITEM to more methods. We currently only document it for the getCurrentMediaItem(), but the command was always meant to cover all information about the current media item and the position therein. To correctly hide information for controllers, we need to filter the Timeline when bundling the PlayerInfo class if only this command is available. PiperOrigin-RevId: 503098124 (cherry picked from commit 5e9c9ed2346d7fcb10bfa0ffa5f253d7fdc7acc8) 25 January 2023, 18:29:36 UTC
ea1301a Correctly filter PlayerInfo by available getter commands. When bundling PlayerInfo, we need to remove information if the controller is not allowed to access it. This was only partially done at the moment. PiperOrigin-RevId: 502852798 (cherry picked from commit 50f066d63425f44f51108d654006f470d76fb042) 25 January 2023, 18:29:36 UTC
31aae77 Fix javadoc references to `writeSampleData` PiperOrigin-RevId: 502821506 (cherry picked from commit 8fcd6bbffc6d67cf007d09f0230256b3ed551fd8) 25 January 2023, 18:29:36 UTC
7f20729 Make availableCommands known when bundling PlayerInfo When bundling PlayerInfo, we remove data when the controller is not allowed to access this data via getters. We also remove data for performance reasons. In the toBundle() method, it's currently hard to make the connection between allowed commands and filtering, because the values are checked at a different place. This can be made more readable by forwarding the applicable Commands directly. The only functional fix is to filter the Timeline when sending the first PlayerInfo after a connecting a controller if the command to get the Timeline is not available. This also allows us to remove a path to filter MediaItems from Timelines as it isn't used. PiperOrigin-RevId: 502607391 (cherry picked from commit 5461d5cbf1cee5bf85bb3b7ae4f4f22c2c2538b8) 25 January 2023, 18:29:36 UTC
cebc0fa Disables play/pause button when there's nothing to play PiperOrigin-RevId: 502571320 (cherry picked from commit 345f2345c74ccbbf3dd49f125b1b81938b0a9995) 25 January 2023, 18:29:36 UTC
4b3c74f Clarify what default settings are being used for SSAI AdsLoader PiperOrigin-RevId: 502388865 (cherry picked from commit 26e1a28176d8520890802c0a50aec8bc710eb2c3) 25 January 2023, 18:29:36 UTC
8f37ad6 Add AdsLoader.focusSkipButton() This method allows to call through to `StreamManager.focus()` of the currently playing SSAI stream. PiperOrigin-RevId: 501399144 (cherry picked from commit 0ba0c0ed43fbcf4a57f6fc91829ba00d72e3672f) 25 January 2023, 18:29:36 UTC
fc4415b Document that `DownloadService` needs notification permissions Starting with Android 13 (API 33) an app needs to request the permission to post notifications or notifications are suppressed. This change documents this in the class level JavaDoc of the `DownloadService`. Issue: google/ExoPlayer#10884 PiperOrigin-RevId: 501346908 (cherry picked from commit 055ed77433944fc31d431d65e09514e8b3e250f1) 25 January 2023, 18:29:36 UTC
b1b9c12 Request notification permission in demo app for API 33+ Starting with API 33 the POST_NOTIFICATION permission needs to be requested at runtime or the notification is not shown. Note that with an app with targetSdkVersion < 33 but on a device with API 33 the notification permission is automatically requested when the app starts for the first time. If the user does not grant the permission, requesting the permission at runtime result in an empty array of grant results. Issue: google/ExoPlayer#10884 PiperOrigin-RevId: 501320632 (cherry picked from commit 6bacbaac548d612e85647b4d13c22dae0401447e) 25 January 2023, 18:29:36 UTC
61eeb8b Add focusSkipButtonWhenAvailable to focus UI on ATV For TV devices the skip button needs to have the focus to be accessible with the remote control. This property makes this configurable while being set to true by default. PiperOrigin-RevId: 501077608 (cherry picked from commit d2898b70ead3b2ad1244a730c3b456146755c138) 25 January 2023, 18:29:36 UTC
f438607 Update bandwidth meter estimates PiperOrigin-RevId: 501010994 (cherry picked from commit 09a15fb73103c406965856de4d120a5028bb37b5) 25 January 2023, 18:29:36 UTC
0b95e2c Initialise fields used for bundling as String directly Initialising the fields as Integer and then getting a String on compute time is slow. Instead we directly initialise these fields as String. Improves the time taken in bundling PlayerInfo further to less than 200ms from ~300ms. Also modified a test to improve productive coverage. PiperOrigin-RevId: 500003935 (cherry picked from commit d49437c6e112e60e9c85edeef73a73bce7de939a) 25 January 2023, 18:29:35 UTC
f9ae0a6 Fix typo in `DefaultTrackSelector.Parameters` field PiperOrigin-RevId: 499905136 (cherry picked from commit bdd6818c14f97ba305d008c963fd2c369fab312c) 25 January 2023, 18:29:35 UTC
25e6f62 Throw a ParserException instead of a NullPointerException if the sample table (stbl) is missing a required sample description (stsd). As per the javadoc for AtomParsers.parseTrack, ParserException should be "thrown if the trak atom can't be parsed." PiperOrigin-RevId: 499522748 (cherry picked from commit bbe78b10c125529d039fea9bf0117cc04d2a3532) 25 January 2023, 18:29:35 UTC
f3a1f2f Optimise bundling for `Timeline.Window` and `Timeline.Period` Improves the time taken to construct playerInfo from its bundle from ~400 ms to ~300 ms. Also made `Timeline.Window.toBundle(boolean excludeMediaItem)` public as it was required to assert a condition in tests. PiperOrigin-RevId: 499512353 (cherry picked from commit 2a77f1e2f96684c8c2e0b27e4118635af0724811) 25 January 2023, 18:29:35 UTC
fea5eea Check bundles in `MediaItem` to verify keys are skipped Added another check in each of these tests to make sure we don't add keys to bundle for fields with default values. Also fixed comments of similar changes in `AdPlaybackStateTest` and `MediaMetadataTest`. PiperOrigin-RevId: 499463581 (cherry picked from commit 9d431a52ef7a39772f65b8de170a225848be5251) 25 January 2023, 18:29:35 UTC
25c964d Remove player listener on the application thread of the player PiperOrigin-RevId: 497183220 (cherry picked from commit 965606f7a7626b95087845191f9b6d4c33ced2e7) 25 January 2023, 18:29:35 UTC
1e97da9 Enable RTL support in the demo app We might as well keep this enabled by default, rather than having to manually toggle it on to investigate RTL issues like Issue: androidx/media#227. PiperOrigin-RevId: 497159744 (cherry picked from commit 010c6b96e74979370f139f8126c176ea7b279313) 25 January 2023, 18:29:35 UTC
ee72778 Fix order of playback controls in RTL layout Issue: androidx/media#227 #minor-release PiperOrigin-RevId: 497159283 (cherry picked from commit 8313af1677507fb0cc51d53e81bf930f1a954c87) 25 January 2023, 18:29:35 UTC
9b11686 Optimise bundling for `AdPlaybackState` using `AdPlaybackState.NONE` Did not do this optimisation for `AdPlaybackState.AdGroup` as its length is zero for `AdPlaybackState` with no ads. No need to pass default values while fetching keys, which we always set in `AdPlaybackState.AdGroup.toBundle()`. PiperOrigin-RevId: 496995048 (cherry picked from commit f2eac2df711cad579f3042568a24c1f51a119428) 25 January 2023, 18:29:35 UTC
e4fa94a Check `MediaMetadata` bundle to verify keys are skipped Added another check in test to make sure we don't add keys to bundle for fields with `null` values. PiperOrigin-RevId: 496948705 (cherry picked from commit 890fd0a9fb135e938dc465d936b24065c65dbb98) 25 January 2023, 18:29:35 UTC
0417dba Bump IMA SDK version to 3.29.0 Issue: google/ExoPlayer#10845 PiperOrigin-RevId: 496947392 (cherry picked from commit 8ed515880a0b6c05b766e868e2ef931b886925cc) 25 January 2023, 18:29:35 UTC
a212bc9 Update migration script Issue: google/ExoPlayer#10854 PiperOrigin-RevId: 496922055 (cherry picked from commit 8e9f83867b5c9536488cf74f06c4cf2535ef848f) 25 January 2023, 18:29:35 UTC
3cb0195 Fix recursive loop when registering controller visibility listeners There are two overloads of this method due to a type 'rename' from `PlayerControlView.VisibilityListener` to `PlayerView.ControllerVisibilityListener`. Currently when you call one overload it passes `null` to the other one (to clear the other listener). Unfortunately this results in it clearing itself, because it receives a null call back! This change tweaks the documentation to clarify that the 'other' listener is only cleared if you pass a non-null listener in. This solves the recursive problem, and allows the 'legacy' visibility listener to be successfully registered. Issue: androidx/media#229 #minor-release PiperOrigin-RevId: 496876397 (cherry picked from commit 37fd65a8e51ddba92584109217114d9f2c2f009d) 25 January 2023, 18:29:35 UTC
7afdc9e Add error messages to correctness assertions in SimpleBasePlayer Users of this class may run into these assertions when creating the State and they need to check the source code to understand why the State is invalid. Adding error messages to all our correctness assertions helps to understand the root cause more easily. PiperOrigin-RevId: 496875109 (cherry picked from commit b7e887a58dff7615926f8002ee3210b3071c5537) 25 January 2023, 18:29:35 UTC
de203fe Document the relationship between Player methods and available commands #minor-release PiperOrigin-RevId: 496668378 (cherry picked from commit 54e79689e925a2a18bc02522d4f7f73dcfb35d83) 25 January 2023, 18:29:35 UTC
730f3a3 Clarify some Player command and method javadoc #minor-release PiperOrigin-RevId: 496661152 (cherry picked from commit f47ad3c2d097a557bd2222a5b104e7867aef585d) 25 January 2023, 18:29:35 UTC
beeb6e7 Fix Dackka error due to param name mismatch https://developer.android.com/reference/androidx/leanback/media/PlayerAdapter#seekTo(long) #minor-release PiperOrigin-RevId: 496378709 (cherry picked from commit d2a3d8f6fabb6d22ac28a76379725d0915344cba) 25 January 2023, 18:29:35 UTC
65daec3 Remove ellipsis from Player javadoc PiperOrigin-RevId: 496377192 (cherry picked from commit 844428ea329754118b8c0a2d58373415f539d725) 25 January 2023, 18:29:35 UTC
2c17c6e Add playlist and seek operations to SimpleBasePlayer These are the remaining setter operations. They all share the same logic that handles playlist and/or position changes. The logic to create the placeholder state is mostly copied from ExoPlayerImpl's maskTimelineAndPosition and getPeriodPositonUsAfterTimelineChanged. PiperOrigin-RevId: 496364712 (cherry picked from commit 09d37641d1ef3b8cf26dc39cfcd317ebe3ef5c79) 25 January 2023, 18:29:35 UTC
0ab7c75 Check if codec still exists before handling tunneling events The tunneling callbacks are sent via Handler messages and may be handled after the codec/surface was changed or released. We already guard against the codec/surface change condition by creating a new listener and verifying that the current callback happens for the correct listener instance, but we don't guard against a released codec yet. PiperOrigin-RevId: 495882353 (cherry picked from commit 5e23b8bfd5a9a9542c2ab8d23ae51c1689d8ff51) 25 January 2023, 18:29:34 UTC
f178486 Clarify behavior for out-of-bounds indices and align implementations Some Player methods operate relative to existing indices in the playlist (add,remove,move,seek). As these operations may be issued from a place with a stale playlist (e.g. a controller that sends a command while the playlist is changing), we have to handle out- of-bounds indices gracefully. In most cases this is already documented and implemented correctly. However, some cases are not documented and the existing player implementations don't handle these cases consistently (or in some cases not even correctly). PiperOrigin-RevId: 495856295 (cherry picked from commit a1c0b10482baffc3721561446ee4bb788d8a1231) 25 January 2023, 18:29:34 UTC
4b7a005 Rename `EMPTY_MEDIA_ITEM` to `PLACEHOLDER_MEDIA_ITEM` The `MediaItem` instances in the following cases are not actually empty but acts as a placeholder. `EMPTY_MEDIA_ITEM` can also be confused with `MediaItem.EMPTY`. PiperOrigin-RevId: 495843012 (cherry picked from commit 74559b4a188e476378f3f0df908598ce763d909a) 25 January 2023, 18:29:34 UTC
5ff9069 Use theme when loading drawables on API 21+ Issue: androidx/media#220 PiperOrigin-RevId: 495642588 (cherry picked from commit 33f8f406929c739e98bbea475b3609beb7db2b5f) 25 January 2023, 18:29:34 UTC
b9fd7fd Remove parameters with `null` values from bundle in `MediaMetadata` Improves the time taken to construct `playerInfo` from its bundle from ~450 ms to ~400 ms. Each `MediaItem` inside `Timeline.Window` contains `MediaMetadata` and hence is a good candidate for bundling optimisations. There already exists a test to check all parameters for null values when unset. PiperOrigin-RevId: 495614719 (cherry picked from commit 8dea624c980ff65aece63c6aeecdeef894470231) 25 January 2023, 18:29:34 UTC
8e2692d Allow unset index and position values + remove period index This simplifies some position tracking needs for an app implementing SimpleBasePlayer. - The period index can always be derived from the media item index and the position. So there is no need to set it separately. - The media item index can be left unset in the State in case the app doesn't care about the value or wants to set it the default start index (e.g. while the playlist is still empty where UNSET is different from zero). - Similarly, we should allow to set the content position (and buffered position) to C.TIME_UNSET to let the app ignore it or indicate the default position explictly. PiperOrigin-RevId: 495352633 (cherry picked from commit 91557ac9d4eaf83e68f563373541dc8e12043e00) 25 January 2023, 18:29:34 UTC
0e921d1 Clear one-off events from state as soon as they are triggered. This ensures they are not accidentally triggered again when the state is rebuilt with a buildUpon method. PiperOrigin-RevId: 495280711 (cherry picked from commit fa5aaf958d616d831d50fdaceb02d3ff3cbad0fa) 25 January 2023, 18:29:34 UTC
951fea2 Remove parameters with default values from bundle in `MediaItem` This improves the time taken to construct PlayerInfo from bundle from ~600ms to ~450ms. PiperOrigin-RevId: 495055355 (cherry picked from commit 7de47fe2a1493da1b0720ddeb357052d2b1dc5bb) 25 January 2023, 18:29:34 UTC
aa2158d Document the reason for defining private method `defaultIfNull` PiperOrigin-RevId: 495004732 (cherry picked from commit c3ca71fda738772dccc5a5e07293c884d2194f0a) 25 January 2023, 18:29:34 UTC
47b811e Reset isLoading when calling SimpleBasePlayer.stop/release isLoading is not allowed to be true when IDLE, so we have to set to false when stopping in case it was set to true before. PiperOrigin-RevId: 494975405 (cherry picked from commit e4f0b73aa325d096b493bd646c63bc6a4bf5880b) 25 January 2023, 18:29:34 UTC
b9365f5 Forward seek command details to seekTo method in BasePlayer BasePlayer simplifies implementations by handling all the various seek methods and forwarding to a single method that can then be implemented by subclasses. However, this loses the information about the concrete entry point used for seeking, which is relevant when the subclass wants to verify or filter by Player.Command. This can be improved by adding the command as a new parameter. Since we have to change the method anyway, we can also incorporate the boolean flag about whether the current item is repeated to avoid the separate method. PiperOrigin-RevId: 494948094 (cherry picked from commit 6e0f1f10b3666e6c2c74fc5a154dec3f0e03fecb) 25 January 2023, 18:29:34 UTC
3dfbfd3 Clarify and correct allowed multi-threading for some Player methods Some Player methods like getting the Looper and adding listeners were always allowed to be called from any thread, but this is undocumented. This change makes the threading rules of these methods more explicit. Removing listeners was never meant to be called from another thread and we also don't support it safely because final callbacks may be triggered from the wrong thread. To find potential issues, we can assert the correct thread when releasing listeners. Finally, there is a potential race condition when calling addListener from a different thread at the same time as release, which may lead to a registered listener that could receive callbacks after the player is released. PiperOrigin-RevId: 493843981 (cherry picked from commit e9364b0f6e1a104de9cf4393daab521edc4eccf4) 25 January 2023, 18:29:34 UTC
4566416 Remove debug timeout multiplier. It looks like this was added accidentally in <unknown commit>. PiperOrigin-RevId: 493834134 (cherry picked from commit f8e4e1765f3bc956e1e6e9eb17d72cb6c152282c) 25 January 2023, 18:29:34 UTC
a599289 Replace MediaMetadata folderType by isBrowsable The folder type has a mix of information about the item. It shows whether the item is browsable (type != FOLDER_TYPE_NONE) and which Bluetooth folder type to set for legacy session information. It's a lot clearer to split this into a boolean isBrowsable and use the existing mediaType to map back to the bluetooth folder type where required. folderType is not marked as deprecated yet as this would be an API change, which will be done later. PiperOrigin-RevId: 493544589 (cherry picked from commit 9d059352cff0a75f0f9c4e37010bbfa2fc6079fd) 25 January 2023, 18:29:34 UTC
a65d9e9 Support release in SimpleBasePlayer This adds support for the release handling. To align with the established behavior in ExoPlayer, the player can only call listeners from within the release methods (and not afterwards) and automatically enforces an IDLE state (without listener call) in case getters of the player are used after release. PiperOrigin-RevId: 493543958 (cherry picked from commit 3a66c28d4f0fc6bbd7af3f5846a5645aa3ccf778) 25 January 2023, 18:29:34 UTC
d2d45db Add javadoc links to README files Fix some other link titles and destinations spotted along the way. #minor-release PiperOrigin-RevId: 493276172 (cherry picked from commit c006575d4306f9bfad9c6f27d964fab00a6e1718) 25 January 2023, 18:29:34 UTC
5fd6ce5 Fix threading of onFallbackApplied callback The callback is currently triggered on the ExoPlayer playback thread instead of the app thread that added the listener. PiperOrigin-RevId: 492474405 (cherry picked from commit f3fc4fb9735a4b67a3740b3796495017eb5c978c) 25 January 2023, 18:29:03 UTC
fec7b1b Fix `ExoPlayerTest` to use `C.TIME_UNSET` instead of `C.POSITION_UNSET` This inconsistency was exposed by an upcoming change to deprecate `POSITION_UNSET` in favour of `INDEX_UNSET` because position is an ambiguous term between 'byte offset' and 'media position', as shown here. PiperOrigin-RevId: 492470241 (cherry picked from commit 2f8cf947c71db6be9459492117fe95b1a8bc7178) 25 January 2023, 17:39:48 UTC
back to top