Чтобы сделать непрерывный поток, отправляемый клиентам, вам нужно разбить этот проект на две половины.
Воспроизведение
Вам нужно что-то, чтобы декодировать исходные потоки из их сжатыхформатирует в несжатый стандартизированный формат, которым вы можете манипулировать ... необработанные образцы PCM.Используйте дочерний процесс и выводите его в STDOUT, чтобы вы могли получить эти данные в своем скрипте Python.Вы можете использовать VLC для этого, если хотите, но FFmpeg довольно прост:
ffmpeg -i "http://example.com/stream" -ar 48000 -ac 2 -f f32le -acodec pcm_f32le -
Это выведет необработанный PCM в STDOUT как 32-битные числа с плавающей запятой, в стерео, на 48 кГц.Оказавшись в этом стандартном формате, вы можете произвольно объединять потоки.Итак, когда вы закончите воспроизведение одного потока, просто завершите процесс, переключитесь на следующий и начните воспроизведение сэмплов из нового.
Кодировка
Вы хотите создать одинПоток PCM, который затем можно перекодировать с помощью какого-либо внешнего кодера, в основном в противоположность тому, что вы делали при воспроизведении.Опять же, что-то, что FFmpeg может сделать для вас:
ffmpeg -f f32le -ar 48000 -ac 2 - -f opus -acodec libopus icecast://...
Теперь, вы увидите здесь пример вывода, я предложил отослать это в Icecast.Icecast - приличный потоковый сервер, который вы можете использовать.Если вы предпочитаете просто выводить напрямую по HTTP, вы можете.Но если вы воспроизводите этот поток для более чем одного слушателя, я бы предложил, чтобы Icecast или аналогичный позаботился об этом за вас.