Liquidsoap: гибкий клиент потокового аудиовещания для сервера Icecast и многое другое…

Автор: Ромейн Боксис (Romain Beauxis)
Перевод: Алексей Бешенов

2008-04-10

Автор: Ромейн Боксис (Romain Beauxis).

Оригинал: «Liquidsoap: a versatile Icecast source client, and much more…», 5 августа 2007 г.

Представление

Liquidsoap — мощный генератор аудиопотока, созданный для работы с Icecast в качестве исходного клиента. Он был создан для сетевого радио кампуса Ecole Normale Supérieure de Lyon, что налагало жесткие требования: прием пользовательских запросов, поддержка удаленных файлов и списков воспроизведения, составление расписаний специальных программ, сведение джинглов в прямом эфире, взаимодействие с веб-сайтом или IRC-ботом, и так далее.

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

Дизайн

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

В этом языке есть понятие аудиопотока и запроса, встроенные функции для объединения потоков разными методами. Основные особенности:

  • статическая типизация: сервер никогда не рухнет, если в темном закоулке конфигурационного файла будет опечатка,
  • типы предполагаются: не нужно их указывать,
  • язык функционален: вы можете определить свои составные операции, но для описания передач от одного потока к другому также используются функции.

Liquidsoap довольно гибок и может использоваться как демон или как инструмент командной строки и не ограничивается передачей потока серверу Icecast — поток может идти и на вашу локальную звуковую карту!

Использование

Если вы не знаете, каким образом веб-радио строится при помощи Icecast, вам может потребоваться прочесть некоторую дополнительную документацию по этому вопросу. Вкратце, Icecast принимает соединения с исходным звуком и ретранслирует их слушателям. В качестве источника здесь выступает Liquidsoap.

Начнем с очень простого примера. Пусть вы работаете с сервером Icecast на хосте «myhost» с паролем для исходных соединений «hackmeimcool», и вы хотите передавать поток Ogg/Vorbis из одного зацикленного файла (файл может быть в формате Ogg/Vorbis, MP3, WAV, AAC; AAC поддерживается версией с SVN). Вот что должно сделать всю работу:

$ liquidsoap 'output.Icecast.vorbis(host="myhost",password="hackmeimcool",
  mount="mystream.ogg",single("/path/to/my/file"))'

Другое возможное применение — передача сетевого радио на свою звуковую карту с использованием libao. Для этого сделайте

$ liquidsoap 'output.ao(fallback(track_sensitive=false,
  [input.http("http://www.dolebrai.net:8000/dolebrai.ogg"),blank()]))'

Liquidsoap также можно использовать как скриптовой язык; ниже следует код по обоим предыдущим примерам:

#!/usr/bin/liquidsoap

# Устанавливаем вывод сообщений в stdout и /tmp set log.stdout = true set log.dir = "/tmp"

# Выводим файл на сервер Icecast file = single("/path/to/my/file") output.icecast.vorbis(host="myhost",password="hackmeimcool", mount="mystream.ogg",file)

# Выводим сетевое радио локально radio = fallback(track_sensitive=false, [input.http("http://www.dolebrai.net:8000/dolebrai.ogg"),blank()]) output.ao(radio)

Заключение

Полное описание API доступно по адресу http://savonet.sourceforge.net/wiki/LiqReference. Здесь мы не представили многие крутые возможности:

  • звуковые эффекты,
  • особые способы передачи,
  • ввод-вывод звуковой карты,
  • взаимодействие с другими компонентами (веб-сайт, внешний планировщик) в рамках более сложной платформы,
  • многие другие.

Liquidsoap уже используется различными сетевыми станциями, такими как Dolebraï, передающей свободную музыку, RadioPi со сложной многосерверной и многопотоковой конфигурацией.

Это представление Liquidsoap было очень коротким. Это не место для руководства, так что закончим примером использования, который, надеюсь, вызовет у вас желание узнать больше.

Также вы можете попробовать следующее:

$ telnet localhost 1234

q.push /path/to/file

Официальный сайт проекта — http://savonet.sourceforge.net/, список рассылки — savonet-users@lists.sourceforge.net , канал IRC — #savonet на Freenode. Liquidsoap есть в нестабильной и тестовой ветке Debian, в Ubuntu пакета еще нет.