Подход, который вы описываете, обычно используется при доставке видео - обычно используется термин потоковая передача с адаптивной скоростью передачи (ABR).
Ключевое различие между ABR и тем, что вы описываете, заключается в том, что решение о том, какую битрейт использовать для следующего фрагмента, принимает клиент, а не сервер.
Это хорошо работает на практике, так как клиент все равно запрашивает порции, и он также лучше всего знает, может ли он обрабатывать более высокую скорость передачи данных или нужна более низкая, например, путем проверки входного буфера.
Существует несколько реализаций ABR с открытым исходным кодом, которые вы можете изучить, чтобы получить представление о том, как они работают - как уже упоминалось, большинство из них сфокусировано на видео, и поскольку звук обычно очень мал по сравнению с видео, вы, вероятно, обнаружите, что они не используют ABR для аудио но принципы будут такими же.
Вероятно, наиболее простыми из них являются video.js и dash.js:
В частности, если вы посмотрите на правила ABR в dash.js (dash.js / src / streaming / rules / abr / на момент написания), это поможет быстро понять, как они это реализовали - есть Немного опыта и логики, так что вам может быть проще всего использовать что-то захватывающее, как это.