🚧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 stream

  • icecast://source:PASSWORD@HOST:PORT/MOUNT = URL para emitir

Cambia:

  • hackme → tu contraseña de source en icecast.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

#!/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

  1. Guarda el script:

    nano stream_radio.sh

    (Pega el contenido y guarda con Ctrl+O, Enter, Ctrl+X)

  2. Hazlo ejecutable:

    chmod +x stream_radio.sh
  3. Ejecuta el script:

    ./stream_radio.sh
  4. 🎧 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