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:
Instal·lació des dels repositoris oficials
Icecast2 està disponible als repositoris oficials d'Ubuntu:
Durant la instal·lació, se't farà diverses preguntes:
- Configure Icecast2? → Selecciona
Yes - Hostname: Introdueix el nom de domini o IP del servidor (exemple:
radio.exemple.cat) - Source password: Contrasenya per als encoders que enviaran àudio (canvia
hackme) - Relay password: Contrasenya per a relay servers (canvia
hackme) - 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:
Si el servei no està actiu, iniciem-lo:
Configuració Bàsica d'Icecast
Estructura del fitxer de configuració
El fitxer principal de configuració es troba a:
Abans de modificar-lo, creem una còpia de seguretat:
Edició de la configuració
Editem el fitxer amb l'editor preferit:
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:
Si no tens un domini, pots utilitzar la IP pública del servidor:
4. Port d'escolta
Per defecte, Icecast utilitza el port 8000:
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:
Si no hi ha errors, reinicia el servei:
Configuració del Firewall
UFW (Ubuntu Firewall)
Si utilitzes UFW, obre el port 8000:
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:
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ó:
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
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:
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:
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
Configuració de Butt
- Obre Butt des del menú d'aplicacions
- Ves a Settings (icona d'engranatge)
Configuració del servidor:
- A la pestanya Main, clica ADD
- Emplena els camps:
- Address: IP o domini del servidor Icecast
- Port: 8000
- Password: La contrasenya configurada a
source-password - IceCast mountpoint:
/radio.mp3(o el nom que prefereixis) - IceCast user: source
Configuració d'àudio:
- Pestanya Audio:
- Audio Device: Selecciona el teu micròfon o dispositiu d'entrada
- Samplerate: 44100 Hz
- Bitrate: 128 kbps
- Format: mp3 o opus
Configuració de metadades:
- Pestanya Stream:
- Server name: Nom de la teva ràdio
- Description: Descripció breu
- Genre: Gènere musical
- URL: Web de la ràdio
Emetre en directe amb Butt
- Selecciona el servidor configurat al menú desplegable
- Clica el botó Play (triangle verd)
- Butt començarà a enviar àudio a Icecast
- 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:
- Genera o obten un certificat SSL (Let's Encrypt recomanat)
- 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>
- Reinicia Icecast:
Accedeix ara via HTTPS:
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:
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ó:
Si hi ha errors de sintaxi XML, es mostrarà la línia problemàtica.
Comprovar permisos:
Assegura't que l'usuari icecast2 té permisos d'escriptura.
No puc connectar com a source
Error: "Authentication failed"
- Verifica que la contrasenya
source-passwordcoincideixi - 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:
Hauria d'aparèixer el mount point llistat.
Prova des del servidor local primer:
Si funciona localment però no remotament, és probable que sigui un problema de firewall.
Verifica connectivitat:
Si no connecta, revisa les regles del firewall.
Alta latència o tall de reproducció
Augmenta el burst-size:
Verifica amplada de banda:
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
- Canvia totes les contrasenyes per defecte
- Utilitza SSL/TLS per xifrar el trànsit
- Limita l'accés amb firewall i autenticació
- Manté el sistema actualitzat:
- Monitoritza els logs regularment per detectar accessos no autoritzats
Rendiment
- Utilitza formats eficients: Opus ofereix millor qualitat a bitrates més baixos
- Configura límits adequats de clients i sources
- Implementa CDN o múltiples relays per a audiències grans
- Monitoritza recursos:
Experiència d'usuari
- Proporciona múltiples qualitats: Un stream d'alta qualitat i un altre per mòbils
- Configura metadades correctament: Nom del stream, descripció, gènere
- Implementa fallback: Stream de reserva per quan falli la font principal
- 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
- Icecast Mailing List
- r/icecast - Comunitat a Reddit
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!