Salta el contingut

Instal·lació i Configuració d'Icecast a Linux

Introducció

En aquesta guia aprendrem a instal·lar i configurar Icecast2, el servidor de streaming d'àudio de codi obert més utilitzat. Icecast permet crear la nostra pròpia emissora de ràdio per Internet amb capacitat per múltiples oients simultanis i suport per diversos formats d'àudio.

Treballarem amb Ubuntu Server 22.04 LTS, encara que els passos són similars per a altres distribucions de Linux basades en Debian.


Requisits Previs

Requisits de maquinari

Per a un servidor bàsic amb fins a 50 oients simultanis:

  • CPU: 1 core (2 cores recomanat)
  • RAM: 512 MB (1 GB recomanat)
  • Disc: 10 GB (més si emmagatzemes arxius d'àudio)
  • Xarxa: Connexió estable amb pujada mínima de 10 Mbps

Càlcul d'amplada de banda:

Stream a 128 kbps × 50 oients = 6.400 kbps = 6,4 Mbps (pujada)
Afegim 30% de marge = 8,32 Mbps necessaris

Requisits de programari

  • Ubuntu Server 22.04 LTS (o similar)
  • Accés root o sudo
  • Connexió a Internet activa
  • Coneixements bàsics de terminal Linux

Instal·lació d'Icecast2

Actualització del sistema

Abans de començar, actualitzem els repositoris i el sistema:

sudo apt update
sudo apt upgrade -y

Instal·lació des dels repositoris oficials

Icecast2 està disponible als repositoris oficials d'Ubuntu:

sudo apt install icecast2 -y

Durant la instal·lació, se't farà diverses preguntes:

  1. Configure Icecast2? → Selecciona Yes
  2. Hostname: Introdueix el nom de domini o IP del servidor (exemple: radio.exemple.cat)
  3. Source password: Contrasenya per als encoders que enviaran àudio (canvia hackme)
  4. Relay password: Contrasenya per a relay servers (canvia hackme)
  5. Administration password: Contrasenya per accedir a l'administració web (canvia hackme)

Seguretat

És crític canviar les contrasenyes per defecte. Utilitza contrasenyes fortes i úniques per evitar accessos no autoritzats.

Verificació de la instal·lació

Comprova que Icecast s'ha instal·lat correctament:

# Verificar versió
icecast2 -v

# Comprovar estat del servei
sudo systemctl status icecast2

Si el servei no està actiu, iniciem-lo:

sudo systemctl start icecast2
sudo systemctl enable icecast2

Configuració Bàsica d'Icecast

Estructura del fitxer de configuració

El fitxer principal de configuració es troba a:

/etc/icecast2/icecast.xml

Abans de modificar-lo, creem una còpia de seguretat:

sudo cp /etc/icecast2/icecast.xml /etc/icecast2/icecast.xml.backup

Edició de la configuració

Editem el fitxer amb l'editor preferit:

sudo nano /etc/icecast2/icecast.xml

Paràmetres essencials

1. Límits de connexions

Defineix quants clients i fonts pot gestionar el servidor:

<limits>
    <clients>100</clients>         <!-- Màxim oients simultanis -->
    <sources>2</sources>           <!-- Màxim fonts simultànies -->
    <queue-size>524288</queue-size>
    <client-timeout>30</client-timeout>
    <header-timeout>15</header-timeout>
    <source-timeout>10</source-timeout>
    <burst-on-connect>1</burst-on-connect>
    <burst-size>65535</burst-size>
</limits>

Explicació dels paràmetres: - clients: Nombre màxim d'oients simultanis - sources: Nombre màxim de fonts que poden emetre alhora - burst-size: Buffer enviat immediatament al connectar (millora l'inici de reproducció)

2. Autenticació

Configura les contrasenyes d'accés:

<authentication>
    <source-password>ContraIceSe2024!</source-password>
    <relay-password>RelaySecure2024!</relay-password>
    <admin-user>admin</admin-user>
    <admin-password>AdminSecure2024!</admin-password>
</authentication>

Bones pràctiques

  • Utilitza contrasenyes diferents per a cada rol
  • Mínim 12 caràcters amb majúscules, minúscules, números i símbols
  • Canvia les contrasenyes periòdicament

3. Configuració del hostname

Defineix com s'identifica el servidor:

<hostname>radio.exemple.cat</hostname>

Si no tens un domini, pots utilitzar la IP pública del servidor:

<hostname>203.0.113.50</hostname>

4. Port d'escolta

Per defecte, Icecast utilitza el port 8000:

<listen-socket>
    <port>8000</port>
    <!-- <bind-address>0.0.0.0</bind-address> -->
</listen-socket>

Per escoltar només en una IP específica, descomenta i modifica bind-address.

5. Paths i directoris

Ubicacions dels fitxers del sistema:

<paths>
    <basedir>/usr/share/icecast2</basedir>
    <logdir>/var/log/icecast2</logdir>
    <webroot>/usr/share/icecast2/web</webroot>
    <adminroot>/usr/share/icecast2/admin</adminroot>
    <alias source="/" destination="/status.xsl"/>
</paths>

6. Logging

Configuració dels registres d'activitat:

<logging>
    <accesslog>access.log</accesslog>
    <errorlog>error.log</errorlog>
    <loglevel>3</loglevel> <!-- 1=error, 2=warn, 3=info, 4=debug -->
    <logsize>10000</logsize>
</logging>

Configuració completa d'exemple

Aquí tens una configuració bàsica funcional:

<icecast>
    <location>Catalunya, Espanya</location>
    <admin>admin@exemple.cat</admin>

    <limits>
        <clients>100</clients>
        <sources>2</sources>
        <queue-size>524288</queue-size>
        <client-timeout>30</client-timeout>
        <header-timeout>15</header-timeout>
        <source-timeout>10</source-timeout>
        <burst-on-connect>1</burst-on-connect>
        <burst-size>65535</burst-size>
    </limits>

    <authentication>
        <source-password>FontSecure2024!</source-password>
        <relay-password>RelaySecure2024!</relay-password>
        <admin-user>admin</admin-user>
        <admin-password>AdminSecure2024!</admin-password>
    </authentication>

    <hostname>radio.exemple.cat</hostname>

    <listen-socket>
        <port>8000</port>
    </listen-socket>

    <fileserve>1</fileserve>

    <paths>
        <basedir>/usr/share/icecast2</basedir>
        <logdir>/var/log/icecast2</logdir>
        <webroot>/usr/share/icecast2/web</webroot>
        <adminroot>/usr/share/icecast2/admin</adminroot>
        <alias source="/" destination="/status.xsl"/>
    </paths>

    <logging>
        <accesslog>access.log</accesslog>
        <errorlog>error.log</errorlog>
        <loglevel>3</loglevel>
        <logsize>10000</logsize>
    </logging>

    <security>
        <chroot>0</chroot>
    </security>
</icecast>

Verificació de la configuració

Abans de reiniciar Icecast, verifica que la configuració sigui vàlida:

icecast2 -c /etc/icecast2/icecast.xml

Si no hi ha errors, reinicia el servei:

sudo systemctl restart icecast2
sudo systemctl status icecast2

Configuració del Firewall

UFW (Ubuntu Firewall)

Si utilitzes UFW, obre el port 8000:

# Permetre tràfic al port 8000
sudo ufw allow 8000/tcp

# Verificar regles
sudo ufw status

Firewalld (CentOS/RHEL)

Si utilitzes firewalld:

sudo firewall-cmd --permanent --add-port=8000/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

iptables (manual)

Si utilitzes iptables directament:

sudo iptables -A INPUT -p tcp --dport 8000 -j ACCEPT
sudo iptables-save | sudo tee /etc/iptables/rules.v4

Accés a la Interfície Web

Pàgina de estat

Obre un navegador i accedeix a:

http://IP_DEL_SERVIDOR:8000

Hauries de veure la pàgina d'estat d'Icecast mostrant: - Informació del servidor - Llista de mount points actius (inicialment buida) - Estadístiques globals

Interfície d'administració

Per accedir a l'administració:

http://IP_DEL_SERVIDOR:8000/admin/

Introdueix: - Usuari: admin - Contrasenya: La que vas configurar a admin-password

Des d'aquí pots: - Veure estadístiques detallades - Gestionar mount points - Desconnectar fonts o clients - Veure logs en temps real


Configuració d'una Font d'Àudio (Source)

Per enviar àudio a Icecast necessitem un encoder. Utilitzarem ffmpeg per a aquest exemple.

Instal·lació de ffmpeg

sudo apt install ffmpeg -y

Streaming d'un fitxer MP3

ffmpeg -re -i musica.mp3 \
  -codec:a libmp3lame -b:a 128k \
  -content_type audio/mpeg \
  -f mp3 \
  icecast://source:FontSecure2024!@localhost:8000/radio.mp3

Explicació dels paràmetres: - -re: Llegeix el fitxer a velocitat real (no el més ràpid possible) - -i musica.mp3: Fitxer d'entrada - -codec:a libmp3lame: Codec MP3 - -b:a 128k: Bitrate de 128 kbps - -content_type audio/mpeg: Tipus MIME - -f mp3: Format de sortida - icecast://source:contrasenya@servidor:port/mountpoint

Streaming en format Opus (més eficient)

ffmpeg -re -i musica.mp3 \
  -codec:a libopus -b:a 96k \
  -content_type audio/opus \
  -f opus \
  icecast://source:FontSecure2024!@localhost:8000/radio.opus

Opus ofereix millor qualitat que MP3 a bitrates més baixos, ideal per streaming web modern.

Streaming des de micròfon (Linux ALSA)

# Llistar dispositius d'àudio disponibles
arecord -l

# Streaming en directe des de micròfon
ffmpeg -f alsa -i hw:0 \
  -codec:a libmp3lame -b:a 128k \
  -content_type audio/mpeg \
  -f mp3 \
  icecast://source:FontSecure2024!@localhost:8000/directe.mp3

Verificació del stream

Mentre ffmpeg estigui executant-se, actualitza la pàgina web d'Icecast:

http://IP_DEL_SERVIDOR:8000

Hauries de veure el mount point (per exemple /radio.mp3) llistat amb informació sobre: - Bitrate - Nombre d'oients actuals - Temps en actiu

Pots reproduir el stream clicant a l'enllaç M3U o accedint directament a:

http://IP_DEL_SERVIDOR:8000/radio.mp3

Instal·lació de Butt (Broadcast Using This Tool)

Butt és una aplicació gràfica multiplataforma ideal per emetre en directe des d'escriptori.

Instal·lació a Ubuntu

sudo apt install butt -y

Configuració de Butt

  1. Obre Butt des del menú d'aplicacions
  2. Ves a Settings (icona d'engranatge)

Configuració del servidor:

  1. A la pestanya Main, clica ADD
  2. Emplena els camps:
  3. Address: IP o domini del servidor Icecast
  4. Port: 8000
  5. Password: La contrasenya configurada a source-password
  6. IceCast mountpoint: /radio.mp3 (o el nom que prefereixis)
  7. IceCast user: source

Configuració d'àudio:

  1. Pestanya Audio:
  2. Audio Device: Selecciona el teu micròfon o dispositiu d'entrada
  3. Samplerate: 44100 Hz
  4. Bitrate: 128 kbps
  5. Format: mp3 o opus

Configuració de metadades:

  1. Pestanya Stream:
  2. Server name: Nom de la teva ràdio
  3. Description: Descripció breu
  4. Genre: Gènere musical
  5. URL: Web de la ràdio

Emetre en directe amb Butt

  1. Selecciona el servidor configurat al menú desplegable
  2. Clica el botó Play (triangle verd)
  3. Butt començarà a enviar àudio a Icecast
  4. L'indicador de connexió mostrarà el temps en actiu i listeners

Configuració Avançada

Mount points amb configuració específica

Pots definir configuracions específiques per a cada mount point:

<mount type="normal">
    <mount-name>/radio-hq.opus</mount-name>
    <username>source</username>
    <password>ContraHQ2024!</password>
    <max-listeners>50</max-listeners>
    <dump-file>/var/log/icecast2/radio-hq.dump</dump-file>
    <burst-size>65535</burst-size>
    <fallback-mount>/radio.mp3</fallback-mount>
    <fallback-override>1</fallback-override>
    <fallback-when-full>1</fallback-when-full>
    <stream-name>Ràdio Exemple HQ</stream-name>
    <stream-description>Alta qualitat en Opus</stream-description>
    <stream-url>https://exemple.cat</stream-url>
    <genre>Variada</genre>
    <public>1</public>
</mount>

Paràmetres destacats: - max-listeners: Límit d'oients per aquest mount - fallback-mount: Mount alternatiu si aquest falla - dump-file: Grava el stream a un fitxer - public: Si es publica a directoris públics (YP)

Autenticació per a oients

Pots restringir l'accés als oients amb autenticació HTTP:

<mount type="normal">
    <mount-name>/radio-privat.mp3</mount-name>
    <authentication type="htpasswd">
        <option name="filename" value="/etc/icecast2/listeners.htpasswd"/>
        <option name="allow_duplicate_users" value="0"/>
    </authentication>
</mount>

Crea el fitxer de contrasenyes:

sudo htpasswd -c /etc/icecast2/listeners.htpasswd oient1
sudo htpasswd /etc/icecast2/listeners.htpasswd oient2

Relay / Restream

Configurar Icecast per retransmetre un stream d'un altre servidor:

<relay>
    <server>servidor-origen.cat</server>
    <port>8000</port>
    <mount>/radio-origen.mp3</mount>
    <local-mount>/radio-relay.mp3</local-mount>
    <relay-shoutcast-metadata>0</relay-shoutcast-metadata>
    <on-demand>0</on-demand>
</relay>

SSL/TLS (HTTPS)

Per xifrar el trànsit, configura SSL:

  1. Genera o obten un certificat SSL (Let's Encrypt recomanat)
sudo apt install certbot -y
sudo certbot certonly --standalone -d radio.exemple.cat
  1. Configura SSL a Icecast:
<listen-socket>
    <port>8443</port>
    <ssl>1</ssl>
</listen-socket>

<paths>
    <ssl-certificate>/etc/letsencrypt/live/radio.exemple.cat/fullchain.pem</ssl-certificate>
    <ssl-private-key>/etc/letsencrypt/live/radio.exemple.cat/privkey.pem</ssl-private-key>
</paths>
  1. Reinicia Icecast:
sudo systemctl restart icecast2

Accedeix ara via HTTPS:

https://radio.exemple.cat:8443

Monitorització i Manteniment

Logs del sistema

Els logs d'Icecast es troben a /var/log/icecast2/:

# Veure errors en temps real
sudo tail -f /var/log/icecast2/error.log

# Veure accessos en temps real
sudo tail -f /var/log/icecast2/access.log

Estadístiques en temps real

Accedeix a la interfície d'administració per veure: - Nombre d'oients actuals - Pics d'audiència - Durada de les sessions - IPs dels oients - User-agents (reproductors utilitzats)

Automatització amb systemd

Per assegurar que Icecast s'executi sempre, habilita l'inici automàtic:

sudo systemctl enable icecast2

Rotació de logs

Ubuntu ja configura logrotate per Icecast. Pots ajustar-lo a /etc/logrotate.d/icecast2:

/var/log/icecast2/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 640 icecast2 icecast
    sharedscripts
    postrotate
        systemctl reload icecast2 >/dev/null 2>&1 || true
    endscript
}

Resolució de Problemes

Icecast no s'inicia

Verificar errors de configuració:

sudo icecast2 -c /etc/icecast2/icecast.xml

Si hi ha errors de sintaxi XML, es mostrarà la línia problemàtica.

Comprovar permisos:

ls -la /var/log/icecast2/
ls -la /usr/share/icecast2/

Assegura't que l'usuari icecast2 té permisos d'escriptura.

No puc connectar com a source

Error: "Authentication failed"

  • Verifica que la contrasenya source-password coincideixi
  • Comprova que utilitzes l'usuari source

Error: "Mount point in use"

  • El mount point ja està ocupat per una altra font
  • Desconnecta la font existent o utilitza un mount point diferent

No puc escoltar el stream

Comprova que el stream està actiu:

http://IP_DEL_SERVIDOR:8000

Hauria d'aparèixer el mount point llistat.

Prova des del servidor local primer:

curl http://localhost:8000/radio.mp3 > test.mp3

Si funciona localment però no remotament, és probable que sigui un problema de firewall.

Verifica connectivitat:

# Des d'un altre ordinador
telnet IP_DEL_SERVIDOR 8000

Si no connecta, revisa les regles del firewall.

Alta latència o tall de reproducció

Augmenta el burst-size:

<burst-size>131072</burst-size> <!-- 128 KB -->

Verifica amplada de banda:

# Monitoritzar tràfic de xarxa
sudo iftop -i eth0

Si l'amplada de banda està saturada, considera: - Reduir el bitrate del stream - Limitar el nombre de clients - Millorar la connexió de xarxa


Bones Pràctiques

Seguretat

  1. Canvia totes les contrasenyes per defecte
  2. Utilitza SSL/TLS per xifrar el trànsit
  3. Limita l'accés amb firewall i autenticació
  4. Manté el sistema actualitzat:
    sudo apt update && sudo apt upgrade -y
    
  5. Monitoritza els logs regularment per detectar accessos no autoritzats

Rendiment

  1. Utilitza formats eficients: Opus ofereix millor qualitat a bitrates més baixos
  2. Configura límits adequats de clients i sources
  3. Implementa CDN o múltiples relays per a audiències grans
  4. Monitoritza recursos:
    htop
    iftop
    

Experiència d'usuari

  1. Proporciona múltiples qualitats: Un stream d'alta qualitat i un altre per mòbils
  2. Configura metadades correctament: Nom del stream, descripció, gènere
  3. Implementa fallback: Stream de reserva per quan falli la font principal
  4. Proporciona reproductors web: Facilita l'accés sense instal·lar programari

Recursos Addicionals

Documentació oficial

Eines complementàries

  • Liquidsoap: Automatització avançada de programació
  • Azuracast: Plataforma web completa per gestionar ràdio
  • mpd + ympd: Servidor de música amb control web

Comunitat


Conclusió

Ara tens un servidor Icecast completament funcional capaç de distribuir àudio a Internet. Has après a:

  • ✅ Instal·lar i configurar Icecast2
  • ✅ Obrir ports i configurar el firewall
  • ✅ Enviar àudio amb ffmpeg i Butt
  • ✅ Configurar mount points personalitzats
  • ✅ Implementar SSL/TLS per a connexions segures
  • ✅ Monitoritzar i solucionar problemes comuns

Experimenta amb diferents configuracions, formats i eines per adaptar el servei a les teves necessitats específiques. Recorda sempre respectar els drets d'autor si emets música comercial!