Назад | Перейти на главную страницу

Потоковое аудио с использованием переключаемых источников без остановки потокового восходящего канала (Poor Man's Barix Exstreamer?)

Итак, я одинокий ИТ-персонал на радиостанции, и у меня есть головной убор (для себя). У нас была пара ПК, транслирующих наш звук (полученный обратно по воздуху, вывод через монитор в гнездо для микрофона) в коммерческую потоковую службу, по одному для каждой из двух станций. Естественно, это было далеко не оптимально по многим причинам (в последнюю очередь они использовали XP).

В любом случае, я понял, как объединить все это на одной машине, используя ffmpeg для выборки аудиовходов и вывода на сервер icecast. Все идет нормально. Примерно последний год все шло гладко. Одна проблема: мы должны делать много отключений в спортивных состязаниях, и когда мы это делаем, поток просто становится недоступным (на стороне пользователя у нас в основном служба отключает нашу возможность подключения во время отключений). Таким образом, пользователи получают эквивалент мертвого воздуха. Более того, это требует от нас обработки отключений через их интерфейс, и мы не можем делать это локально (мое предпочтение).

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

Текущая настройка просто использует ffmpeg для выборки аудиолинии и вывода на сервер icecast.

Что я хочу сделать, так это разделить эту настройку на экземпляр ffmpeg, который производит выборку аудиолинии и потенциально выполняет некоторую обработку на ней, которая передается в процесс ffmpeg, который просто остается подключенным к серверу icecast и отправляет все, что он получает (и если он ничего не получает, он просто отправляет тишину на сервер icecast).

Процесс источника / сэмпла должен быть убиваемым, не прерывая расширяющийся процесс ffmpeg, а новый источник ffmpeg (например, отправка звука из предварительно записанного файла, локального для машины) может быть удален и начать предоставление звука.

Вероятно, то, что я хочу, было бы эквивалентом аудиосервера. Он работает на стандартном минимальном Linux Mint 19, настроенном для автоматической работы.

Примерно:

[Audio Line] ----/---- [Extreamer ffmpeg] ---- [Streaming Service]
[Audio File] ---/
[Nothing]    --/

Я не особо знаком с такими вещами, как Jack и Pulseaudio, но я не против их использования.

То, что мне нужно, в основном эквивалентно подключению двух или трех аудиоисточников через коммутатор к экстримеру Barix. Но мне это нужно в программном обеспечении.

Я пробовал использовать параметр -stream-loop для ffmpeg, но не уверен, что использую его правильно. Я также пробовал кодировать с использованием источника, помещать его в FIFO, а затем читать FIFO с помощью процесса extreamer. Это сработало не так хорошо, как я надеялся. Я помню, что процесс передал выходные данные первого процесса нормально, но когда это закончилось, процесс экстримера решил, что это сделано и завершено, вместо того, чтобы оставаться на связи и ждать дополнительных данных.