🚧Icecast - música en streaming
Vamos a probar icecast con ffmpeg
En Debian/Ubuntu empezaremos por instalar el servicio:
sudo apt install ffmpeg
Con FFmpeg puedes tomar un archivo de audio o una fuente en vivo y enviarlo a Icecast en tiempo real usando una línea de comando como el siguiente:
ffmpeg -re -i input.mp3 \
-c:a libmp3lame -b:a 128k \
-content_type audio/mpeg \
-f mp3 \
icecast://source:hackme@localhost:8000/stream.mp3
🔍 Explicación:
-re
= reproduce en tiempo real (como si fuera una radio)-i input.mp3
= archivo de entrada-c:a libmp3lame
= codifica en MP3-b:a 128k
= bitrate del audio-f mp3
= formato del streamicecast://source:PASSWORD@HOST:PORT/MOUNT
= URL para emitir
Cambia:
hackme
→ tu contraseña de source enicecast.xml
localhost
→ IP local o pública de tu servidor
/stream.mp3
→ el mount point definido
O bien pudieras enviar toda una carpeta en loop:
ffmpeg -re -stream_loop -1 -i "$(find ~/Music -type f -name '*.mp3' | shuf -n 1)" \
-c:a libmp3lame -b:a 128k \
-content_type audio/mpeg \
-f mp3 \
icecast://source:hackme@localhost:8000/stream.mp3
🔁 Esto toma una canción al azar en bucle infinito (puedes combinarlo con scripts para rotación aleatoria).
🎙️ 5. Streaming de audio en vivo (micrófono)
🔹 En Linux con ALSA:
Encuentra tu dispositivo:
arecord -l
Ejemplo para usar el dispositivo por defecto:
ffmpeg -f alsa -i default \
-c:a libmp3lame -b:a 128k \
-content_type audio/mpeg \
-f mp3 \
icecast://source:hackme@localhost:8000/stream.mp3
🔹 Con PulseAudio:
ffmpeg -f pulse -i default \
-c:a libmp3lame -b:a 128k \
-content_type audio/mpeg \
-f mp3 \
icecast://source:hackme@localhost:8000/stream.mp3
Puedes hacer streaming de lo que esté saliendo por tus altavoces con
pulse
usando el monitor de tu tarjeta:
ffmpeg -f pulse -i "alsa_output.pci-0000_00_1f.3.analog-stereo.monitor" ...
📺 6. Ver el resultado
Abre en el navegador o VLC:
http://localhost:8000/stream.mp3
Si estás desde otro dispositivo, cambia localhost
por tu IP local o pública.
✅ Tip Extra: Metadata y título
Puedes añadir información del stream con:
ffmpeg -re -i input.mp3 \
-c:a libmp3lame -b:a 128k \
-content_type audio/mpeg \
-f mp3 \
-metadata title="Mi Radio FFMPEG" \
icecast://source:hackme@localhost:8000/stream.mp3
🧪 Para pruebas rápidas:
ffmpeg -f lavfi -i sine=frequency=440:duration=60 \
-c:a libmp3lame -b:a 128k \
-content_type audio/mpeg -f mp3 \
icecast://source:hackme@localhost:8000/test.mp3
(Esto transmite un tono de prueba 🎶)
Vamos a ver un script Bash listo para lanzar automáticamente un stream de audio a Icecast usando FFmpeg, ideal para una radio casera o personal 🔥🎙️
📜 Script: stream_radio.sh
stream_radio.sh
#!/bin/bash
# CONFIGURACIÓN DEL STREAM
ICECAST_HOST="localhost"
ICECAST_PORT="8000"
ICECAST_PASSWORD="hackme"
ICECAST_MOUNT="/stream.mp3"
# CONFIGURACIÓN DE AUDIO
BITRATE="128k"
CODEC="libmp3lame"
CONTENT_TYPE="audio/mpeg"
FORMAT="mp3"
# DIRECTORIO CON MÚSICA
MUSIC_DIR="$HOME/Music"
# LOGO
echo "🎵 Iniciando stream de radio con FFmpeg..."
# COMPROBAR FFmpeg
if ! command -v ffmpeg &> /dev/null; then
echo "❌ FFmpeg no está instalado."
exit 1
fi
# COMPROBAR QUE HAY MÚSICA
if [ ! -d "$MUSIC_DIR" ]; then
echo "❌ No se encontró el directorio de música: $MUSIC_DIR"
exit 1
fi
# INICIAR EL STREAM (loop aleatorio)
while true; do
echo "🔁 Reproduciendo nuevo archivo..."
FILE=$(find "$MUSIC_DIR" -type f \( -iname "*.mp3" -o -iname "*.ogg" \) | shuf -n 1)
if [ -z "$FILE" ]; then
echo "⚠️ No se encontraron archivos de audio."
sleep 10
continue
fi
echo "🎧 Reproduciendo: $FILE"
ffmpeg -re -i "$FILE" \
-c:a $CODEC -b:a $BITRATE \
-content_type $CONTENT_TYPE \
-f $FORMAT \
icecast://source:$ICECAST_PASSWORD@$ICECAST_HOST:$ICECAST_PORT$ICECAST_MOUNT
echo "🛑 FFmpeg se detuvo. Reiniciando en 5 segundos..."
sleep 5
done
🛠️ Instrucciones de uso
Guarda el script:
nano stream_radio.sh
(Pega el contenido y guarda con
Ctrl+O
,Enter
,Ctrl+X
)Hazlo ejecutable:
chmod +x stream_radio.sh
Ejecuta el script:
./stream_radio.sh
🎧 Abre en tu móvil o navegador:
http://<tu_ip_local>:8000/stream.mp3
🧠 Extras que puedes añadir:
Auto-stop tras X canciones o tiempo.
Logs de reproducción.
Añadir jingles entre canciones.
Transiciones suaves con
ffmpeg
(fundido cruzado).
Última actualización