A feasible solution is max-min fair if it is not possible to increase the utility of one user (1) while maintaining feasibility, and (2) without reducing the utility of another user that has equal or less utility.
In discrete domains, max-min fair solution may not exist. In this case, maximal fairness was defined in [1], as an alternative.
Maximally fair solution can be achieved using a progressive filling approach: allocate each stream its lowest bitrate. Then, select and upgrade the stream with the lowest utility value to the next higher bitrate if the new total of allocated bitrates does not exceed the link capacity. Repeat the previous step.
References
[1] A. Mansy. Network and End-host support for HTTP Adaptive Video Streaming. PhD thesis, Georgia Institute of Technology, 2014.