Raspberry + Liquidsoap + Icecast

March 6, 2019

Здесь будет туториал Liquidsoap на одноплатнике.

Использовалась связка Raspberry Pi 3 B+ вместе с Raspbian Stretch Lite 4.14, Liquidsoap 1.3.3, Icecast 2.4.4 (туториал по установке последнего здесь).

Raspbian

https://www.raspberrypi.org/downloads/

Есть три варианта: 

  • Записываем на флешку NOOBS и запускаем Raspberry Pi - на старте выберем, например, самый простой Raspbian Stretch Lite (без десктопа будет достаточно, но при желании и достаточном месте на microSD можно выбрать и десктоп версию)
  • С помощью Etcher или любого другого софта записывается .img образ Raspbian
  • .img образ записывается на флешку с помощью командной строки (вариант для любителей)

 

Начинаем с чистого образа Raspbian/Jessie. После установки ОС: 

sudo raspi-config

По желанию можно настроить следующее:

  • Change User Password
  • Advanced Options - Expand Filesystem.
  • Advanced Options - Hostname (по желанию для безопасности можно изменить hostname)
  • Interfacing Options - SSH - Enable (для связи через SSH, опционально)
  • Finish - Reboot - Yes

sudo apt-get update

sudo apt-get upgrade

Liquidsoap

Liquidsoap - многофункциональный, мощный инструмент для создания программируемых аудиотрансляций.

В отличие от привычных программ (вроде SAM Broadcaster, Mixxx, Nicecast, butt (broadcast using this tool), liquidsoap - это скорее язык программирования трансляции медиа. Но в этом его простота: в рабочей директории есть папка с аудиофайлами и один скрипт, в котором мы настраиваем свою радиостанцию.

Он до сих пор поддерживается разработчиками, но его установка вызвала у меня кучу проблем, так как он зависит от множества дополнительных пакетов, и обычный apt-get install тут уже не работает (таким образом можно установить liquidsoap, но это будет старая версия, которая не поддерживается разработчиками), актуальный пакет грузиться с помощью менеджера пакетов opam.

sudo apt-get install opam

Теперь нужно установить несколько пакетов, с которыми работает opam

  • sudo apt-get install camlp4-extra
  • sudo apt-get install libpcre-ocaml-dev
  • sudo apt-get install libmad-ocaml-dev
  • sudo apt-get install m4
  • sudo apt-get install m4-doc

sudo apt-get install opam camlp4-extra libpcre-ocaml-dev libmad-ocaml-dev m4 m4-doc

Из-за особенностей работы opam (он устанавливает всё в папку home того пользователя, который устанавливал пакеты - это хороший и безопасный способ, но мешает нормальной работе, скажем, если нужно сделать что-то под другим пользователем) прибегаем к необходимости создания специального пользователя для работы с liquidsoap:

sudo adduser liquidsoap

sudo adduser liquidsoap audio - The audio group allows access the the audio hardware.  Группа даёт доступ к настройкам аудио. Технически необязательно если Вы собираетесь лишь транслировать аудио, но лишним не будет.

Теперь переключаемся на этого пользователя:

su liquidsoap

cd ~ чтобы перейти в корректную домашнюю директорию

opam init для базовой настройки opam 

Отвечаем y чтобы обновить bashrc

exit - выходим, чтобы зайти обратно и закончить настройку opam

su liquidsoap

opam update - чтобы проверить, что все пакеты актуальны

opam install depext - поможет нам получить список всех пактов, которые необходимы для работы liquidsoap

opam depext taglib mad lame vorbis cry pulseaudio liquidsoap - необходимые пакеты. Вам предложат команду apt-get, отвечаем 'no', так как пользователь liquidsoap не может делать sudo

exit - переключаемся с пользователя liquidsoap обратно на pi и устанавливаем необходимые пакеты:

  • sudo apt-get install libasound2-dev - for ALSA.
  • sudo apt-get install libmp3lame-ocaml-dev - for mp3 encoding
  • sudo apt-get install libtaglib-ocaml-dev - for mp3id3 metadata access
  • sudo apt-get install libalsa-ocaml-dev - for ALSA soundcard i/o
  • sudo apt-get install libpulse-ocaml-dev - for Pulseaudio i/o
  • sudo apt-get install libmad-ocaml-dev - for mp3 decoding
  • sudo apt-get install libcry-ocaml-dev - for shoutcast/icecast output
  • sudo apt-get install libvorbis-ocaml-dev - for ogg/vorbis output
  • sudo apt-get install libogg-ocaml-dev - for ogg/vorbis output

sudo apt-get install libasound2-dev libmp3lame-ocaml-dev libtaglib-ocaml-dev libalsa-ocaml-dev libpulse-ocaml-dev libmad-ocaml-dev libcry-ocaml-dev libvorbis-ocaml-dev libogg-ocaml-dev

Переключаемся обратно на liquidsoap и устанавливаем необходимые пакеты:

su libquidsoap

opam install taglib mad lame vorbis cry samplerate liquidsoap

opam info liquidsoap  выдаст информацию о пакетах, которые можно подключить дополнительно  

 

У меня что-то не работало:
bash: liquidsoap: command not found

При этом информация выдавалась, что пакет установлен:

Решение:

eval $(opam config env)

Чинит эту прблему

# Edit 1: Если не помогло удалите директорию и попробуйте снова

/home/liquidsoap/.opam/4.00.1

 
Лог:

Из radio.liq строчка с выбором директории для .log файла ставится под комментарий, используется стандартное значение. Если выдаётся ошибка, что директории под неё не существует:

FATAL ERROR: Log directory "/home/liquidsoap/.opam/system/lib/liquidsoap/var/log/liquidsoap" does not exist. 

To change it, add the following to your script:

  set("log.file.path", "<path>")

создаём директорию для log:

mkdir -p /home/liquidsoap/.opam/system/lib/liquidsoap/var/log/liquidsoap

Через 3 недели работающего скрипта набирается файл размером 20 Мб, поэтому периодически я его подчищал:

cp radio.log radiobackup.log - если нужно сделать бэкап

rm radio.log - удалить файл (при повторном запуске скрипта лог начнется с начала)

chmod -R 755 /home/liquidsoap/.opam/system/lib/liquidsoap/var/log/liquidsoap/radio.log - разрешаем себе скачивать файл с помощью удобного клиента

 

Liquidsoap установлен!

Теперь осталось настроить поток: 

sudo ln -s /home/liquidsoap/.opam/system/bin/liquidsoap/ usr / bin / liquidsoap 

sudo mkdir / etc / liquidsoap $ sudo nano /etc/liquidsoap/radio.liq

 

Чуть позже добавлю сюда простую radio.liq конфигурацию

 

su liquidsoap

liquidsoap radio.liq &

Добавляем & чтобы можно было закрыть терминал и идти пить чай. 

РАБОТАЕТ

По какой-то причине (сам ещё не разобрался), каждый раз при вхождении в юзера liquidsoap команда liquidsoap не находится, это решается всё тем же eval $(opam config env)

 

 

Моя радиостанция находится здесь: 

 

 
Полезные ссылки

https://docs.google.com/document/d/1g_1M0DT062QnlzZSs5HazH1HMVTksURFYqqauCk7H9c/edit - самые полезный туториал (на английском)

https://www.liquidsoap.info/doc-1.3.6/install.html - официальный сайт, мало мне помог

Это на французском, но вроде второй казался нормальным:

https://habr.com/ru/post/156591/ - отсюда можно позаимствовать идею визуализации директорий

http://u.delta9.pl/k/liquidsoap/complete_case.html - здесь простой скрипт с двумя плейлистами (день/ночь)

https://forum.sourcefabric.org/discussion/13858/liquidsoap-example-script-for-smart-playlist-kind-of/p1 - здесь скрипт с днями недели и часами

 

Deefuzzer

Liquidsoap - сложный и многофункциональный инструмент, но в случае, если такой широкий функционал не нужен, есть более простой в понимании и установке аналог - Deefuzzer. Ниже ссылки на полезную. информацию по нему:

https://pypi.org/project/DeeFuzzer/0.6.3/

https://github.com/yomguy/DeeFuzzer

 

Сравнение характеристик

Raspberry Pi 1 B+      
Temp 37.9'C 38.5'C 39.0'C
CPU

47%

100%

51.3%

100%

79.6%

100%

 

Raspberry Pi 3 B+      
Temp 53.7'C 53.2'C 52.6'C
CPU

8.9%

9.2%

8.9%

8.7%

8.9%

7.9%