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

AC0375/07/06 — Miniactivitat

RA7 · CA7b

Instal·la i configura Icecast2 a Ubuntu Server: canvia les contrasenyes per defecte (source-password, admin-password), engega el servei i comprova des del navegador que la interfície d'administració respon al port 8000. Documenta els passos amb captures que incloguin el teu nomcognom.


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!