37 lines
1.0 KiB
Bash
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
|