Sometimes, you may have some situation where you want to limit video resolution, for example, when a user explicitly set the max resolution from the setting or when a playback surface size is too small and you do not need to get the higher resolutions.
Set Max Bitrate
ExoPlayer provides a way of setting a max bitrate using
DefaultTrackSelector#Parameters. You can use
setMaxVideoSize to limit the max bitrate.
In this way, it works in many cases.
What I mean by “it works in many cases” is that it does not work when you change the max bitrate during the playback, because ExoPlayer discards buffers and decoder reinitialization happens when you change the parameters. So if users could change the max bitrate while they play some video or playback surface size could shrink/expands and you want to change the max bitrate as the playback surface size changes, you would have users wait until ExoPlayer is ready for the new parameters.
Set Max Bitrate Dynamically
So, how do you set a max bitrate while playback goes on? One way you could do is to extend
AdaptiveTrackSelection and override the
canSelectFormat method instead of using
canSelectFormat would be called when ExoPlayer tries to select the resolution and you can return false whenever ExoPlayer is trying to get unwanted resolutions.
Check this out for the entire implementation.