Project

General

Profile

Настройка интернет-вещания с несколькими битрейтами

Установка


Настойку интернет-вещания будем производить на примере связки IceCast – LiquidSoap. Оба бесплатных продукта могут быть размещены как на одном сервере, так и на разных. Мы рассмотрим вариант, когда и IceCast и LiquidSoap устанавливаются на один компьютер.

Первым делом необходимо скачать утилиты с официальных сайтов. Актуальная версия IceCast доступна для скачивания на странице http://icecast.org/download/. Свежая версия LiquidSoap доступна здесь: http://sourceforge.net/projects/savonet/. Отметим, что оба программных продукта представлены как для Windows, так и для операционной системы Linux, что позволяет использовать для наших целей и ее. В данном случае рассмотрим настройку на примере операционной системы семейства Windows.
Ранние версии IceCast позволяли устанавливать приложение как сервис. Сейчас программа просто разворачивается в каталог установки, а запуск ее предполагается посредством открытия исполняемого файла с параметром, передающим путь к конфигурационному XML-файлу. Например, так, если каталог запуска — инсталляционная директория:

.\bin\icecast.exe -c .\icecast.xml

LiquidSoap поставляется только в виде архива, поэтому его необходимо самостоятельно распаковать в целевую директорию. Для удобства рекомендуется использовать каталог C:\Program Files\. Запуск осуществляется точно так же, за исключением того, что в качестве конфигурационного файла используется файл с расширением .liq, имеющий свой синтаксис:

liquidsoap.exe test.liq

На текущий момент запуск IceCast как сервиса невозможен. Если требуется такая возможность, стоит воспользоваться более старой версией, например v2.3.2 (доступна по этой ссылке: http://downloads.xiph.org/releases/icecast/icecast2_win32_2.3.2_setup.exe). На сайте разработчиков есть информация, что в случае большой заинтересованности со стороны пользователей, данную возможность вернут.

В LiquidSoap возможность установки сервиса предусмотрена. Для этого используется параметр —install-service:

liquidsoap.exe —install-service —service-name LiquidSoap —service-title "LiquidSoap Service" "C:\Program Files\LiquidSoap\config.liq"

С точки зрения функциональности, запуск обоих продуктов в виде сервисов предпочтителен, поэтому мы воспользуемся старой версией IceCast. В настройке никаких отличий нет.

Настройка IceCast


Конфигурационный файл IceCast — это xml-файл, определяющий настройки самого сервера, а так же потоков вещания, создаваемых на нем. Рассмотрим основные. Для удобства именования секций настроек будем использовать нотацию XPath.

  • /icecast/limits/sources — определяет максимальное допустимое количество потоков вещания. Будем считать, что мы хотим создать 5 различных битрейтов одной частоты вещания. В этом случае изменим это значение на 5.
  • /icecast/authentication — здесь задаются пароли администратора и пользователей, имеющих права на создание вещательного и зеркального потоков. Настоятельно рекомендуется изменить их.
  • /icecast/hostname — ip-адрес сервера. Как правило, это localhost, но можно явно указать ip на конкретном сетевом адаптере.
  • /icecast/listen-socket/port — порт, на котором располагается сервис. Разумеется, этот порт должен быть открыт наружу (добавлен в исключения брандмауэра), а так же прокинут на маршрутизаторе при использовании NAT.
  • /icecast/mount — секция, отвечающая за настройки определенной точки монтирования (отдельного потока). Здесь понадобится указать кодировку, если используются метаданные.
  • /icecast/mount/mount-name — имя точки монтирования, например: /mount_point.
  • /icecast/mount/charset — кодировка. Необходимо использовать значение UTF-8.

В нашем случае мы получили следующий конфигурационный файл:

<icecast>
    <limits>
        <sources>5</sources>
    </limits>
    <authentication>
        <source-password>P@$$w0rd</source-password>
        <relay-password>P@$$w0rd</relay-password>
        <admin-user>admin</admin-user>
        <admin-password>P@$$w0rd</admin-password>
    </authentication>
    <hostname>localhost</hostname>
    <listen-socket>
        <port>8000</port>
    </listen-socket>
    ...............
    <mount>
        <mount-name>/station1-256kbps-mp3</mount-name>
        <charset>UTF-8</charset>
    </mount>
    ...............
</icecast>

Если все работает корректно, то после запуска сервиса и формирования потока вещания с точкой монтирования /station1-256kbps-mp3, его можно будет прослушать, открыв ссылку http://127.0.0.1:8000/station1-256kbps-mp3.m3u.
Предполагается, что основной поток кодируется в mp3 c достаточным битрейтом, например 256 kbps.
После этого можно приступить к конфигурированию LiquidSoap, который будет заниматься перекодированием базового потока в другие форматы и битрейты.

Настройка LiquidSoap


Мы будем ориентироваться на то, что установленный сервис ссылается на конфигурационный файл C:\Program Files\LiquidSoap\config.liq. Поэтому откроем его на редактирование и внесем следующие правки. Синтаксис файла .liq требует изучения, поскольку возможности программы довольно богаты, но для нашей задачи достаточно будет сделать только две вещи. Сначала мы определим переменную, ссылающуюся на исходный поток:

input = mksafe(input.http("http://127.0.0.1:8000/station1-256kbps-mp3"))

После чего определим новую точку монтирования с нужным форматом и качеством:

output.icecast(%mp3(bitrate=128, samplerate=44100, stereo=true),
  host = "localhost", port = 8000,
  password = "P@$$w0rd", mount = "/station1-128kbps-mp3",
  input)

Более подробно про различные поддерживаемые форматы можно прочитать здесь: http://savonet.sourceforge.net/doc-svn/encoding_formats.html.

В результате мы получили такой файл:

set("log.stdout",false);
set("log.file",false);
input = mksafe(input.http("http://127.0.0.1:8000/station1-256kbps-mp3"));
output.icecast(%mp3(bitrate=128, samplerate=44100, stereo=true),
  host = "localhost", port = 8000,
  password = "P@$$w0rd", mount = "/station1-128kbps-mp3",
  input);
output.icecast(%fdkaac(bitrate=32),
  host = "localhost", port = 8000,
  password = "P@$$w0rd", mount = "/station1-32kbps-aac",
  input);
...............

Запустим сервис LiquidSoap и убедимся, что все работает. Если что-то пошло не так, можно включить логгирование в стандартный поток вывода и попробовать запустить данную конфигурацию в командной строке.

Формирование плей-листа


В итоге мы получили несколько потоков с различным битрейтом. Их можно встроить в плеер на сайте радиостанции. Но иногда требуется объединить их в рамках одного плей-листа, открываемого в пользовательском плеере. Для этого всего лишь нужно создать текстовый файл с расширением .m3u следующего содержания:

#EXTM3U
#EXTINF:-1,StationName (256kbps mp3)
http://127.0.0.1:8000/station1-256kbps-mp3
#EXTINF:-1,StationName (192kbps mp3)
http://127.0.0.1:8000/station1-192kbps-mp3
#EXTINF:-1,StationName (128kbps mp3)
http://127.0.0.1:8000/station1-128kbps-mp3
#EXTINF:-1,StationName (64kbps aac)
http://127.0.0.1:8000/station1-64kbps-aac
#EXTINF:-1,StationName (32kbps aac)
http://127.0.0.1:8000/station1-32kbps-aac

О структуре данного формата можно прочитать здесь: https://ru.wikipedia.org/wiki/M3U.

Add picture from clipboard (Maximum size: 645 MB)