djsoft, безусловно Вы правы, но упустили один, достаточно часто встречаемый момент: перегрузка сервера-источника. С этой проблемой уже никак не бороться
...
Хотя можно, но не каждому это будет по душе...: Сделать огромный буфер (2-5 минут), и заполнять\читать\переподключать в разных потоках. Т.е. когда что-то происходит с источником, программа пытается переподключиться, но музыка не рвётся, потому что у нас ещё 5 минут этого потока в буфере. Как только подключение к источнику восстановлено, буфер начинает опять наполняться, а музыка по прежнему играет, как ни в чём не бывало. Согласен, - это достаточно сложно реализовать, да и есть
большой недостаток: В начала нужно ждать пока наполниться буфер...
У меня нечто похожее было, когда я делал трансляцию эфирных радиостанций в сеть: Основной поток шёл с тюнера, буферизовался (250 секунд) и шёл на цифровой микшер. Параллельно буферизовался поток через интернет (станция выдаёт поток в инет, но качество оставляет желать лучшего). По окончанию заполнения буфера, потоки синхронизировались (по пикам, примерно как в virtual dj) и выдавались в виртуальный аудио интерфейс. Если вдруг что-то происходит с эфирной станцией (падает сигнал, появляется шум или вовсе пропадает станция), то поток начинал браться с интернета. Для конечного слушателя это выглядело как внезапное падение качества звука, без каких-либо обрывов.