Files

37 lines
1.0 KiB
Bash

#!/bin/sh
set -e
FIFO=/audio/stream.fifo
ICECAST_HOST=${ICECAST_HOST:-icecast}
ICECAST_PORT=${ICECAST_PORT:-8000}
ICECAST_PASSWORD=${ICECAST_SOURCE_PASSWORD:-groove_source}
MOUNT=${ICECAST_MOUNT:-/stream.flac}
until [ -p "$FIFO" ]; do
echo "[stream-relay] Waiting for $FIFO..."
sleep 2
done
# Open FIFO with O_RDWR so Mopidy's GStreamer filesink never blocks on open().
# A write-only open blocks until a reader exists; by holding the FIFO open
# O_RDWR here, the write side can proceed immediately at any time.
exec 5<>"$FIFO"
echo "[stream-relay] FIFO open. Encoding PCM → FLAC → icecast://${ICECAST_HOST}:${ICECAST_PORT}${MOUNT}"
ICECAST_URL="icecast://source:${ICECAST_PASSWORD}@${ICECAST_HOST}:${ICECAST_PORT}${MOUNT}"
while true; do
ffmpeg -nostdin \
-f s16le -ar 48000 -ac 2 \
-i "$FIFO" \
-vn \
-c:a flac \
-compression_level 0 \
-f flac \
-content_type audio/flac \
"$ICECAST_URL" 2>&1 || true
echo "[stream-relay] ffmpeg exited — reconnecting in 3s..."
sleep 3
done