Есть ли способ транслировать потоковое аудио с сервера без локального файла? - PullRequest
0 голосов
/ 07 февраля 2019

Я ищу способ непрерывной потоковой передачи аудио с сервера, основная проблема в том, что на стороне сервера будет получено много URL для потоковой передачи аудио.Также будут случаи, когда URL-адрес переключается в прямом эфире, и вместо него передается новый фрагмент аудио.Я еще не нашел решения, которое бы не включало загрузку каждого файла в поток, что могло бы помешать работе в реальном времени.

Я пытался использовать vlc для python, но оно не позволялоВозможность изменить URL-адрес, передаваемый в данный момент.Я также пытался использовать pyaudio, но не смог получить правильный аудиоформат, не говоря уже о замене источника звука.

Пример ссылки, Fairwarning, она будет воспроизводиться автоматически : аудио

1 Ответ

0 голосов
/ 08 февраля 2019

Чтобы сделать непрерывный поток, отправляемый клиентам, вам нужно разбить этот проект на две половины.

Воспроизведение

Вам нужно что-то, чтобы декодировать исходные потоки из их сжатыхформатирует в несжатый стандартизированный формат, которым вы можете манипулировать ... необработанные образцы 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 или аналогичный позаботился об этом за вас.

...