137 lines
4.2 KiB
Bash
Executable File
137 lines
4.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# setup_mediamtx.sh — Install and configure MediaMTX for TechDJ
|
|
# Run on the remote server as a user with sudo access:
|
|
# bash setup_mediamtx.sh
|
|
|
|
set -e
|
|
|
|
LISTENER_PORT=5001
|
|
SRT_PORT=8890
|
|
HLS_PORT=8888
|
|
SRT_PATH=aussie_dj
|
|
MEDIAMTX_CONF=/usr/local/etc/mediamtx/mediamtx.yml
|
|
|
|
echo "==> Detecting architecture..."
|
|
ARCH=$(uname -m)
|
|
case "$ARCH" in
|
|
x86_64) ARCH_LABEL="amd64" ;;
|
|
aarch64) ARCH_LABEL="arm64" ;;
|
|
armv7l) ARCH_LABEL="armv7" ;;
|
|
*) echo "ERROR: Unsupported architecture: $ARCH"; exit 1 ;;
|
|
esac
|
|
echo " Architecture: $ARCH_LABEL"
|
|
|
|
echo "==> Fetching latest MediaMTX version..."
|
|
LATEST=$(curl -fsSL https://api.github.com/repos/bluenviron/mediamtx/releases/latest \
|
|
| grep '"tag_name"' | head -1 | sed 's/.*"v\([^"]*\)".*/\1/')
|
|
if [ -z "$LATEST" ]; then
|
|
echo "ERROR: Could not fetch latest version. Check internet connectivity."
|
|
exit 1
|
|
fi
|
|
echo " Latest version: v$LATEST"
|
|
|
|
# Check if already installed and up to date
|
|
if command -v mediamtx &>/dev/null; then
|
|
INSTALLED=$(mediamtx --version 2>&1 | grep -oP '\d+\.\d+\.\d+' | head -1 || true)
|
|
if [ "$INSTALLED" = "$LATEST" ]; then
|
|
echo "==> MediaMTX v$LATEST already installed, skipping download."
|
|
else
|
|
echo "==> Updating MediaMTX from v$INSTALLED to v$LATEST..."
|
|
INSTALL=1
|
|
fi
|
|
else
|
|
INSTALL=1
|
|
fi
|
|
|
|
if [ "${INSTALL:-0}" = "1" ]; then
|
|
TARBALL="mediamtx_v${LATEST}_linux_${ARCH_LABEL}.tar.gz"
|
|
URL="https://github.com/bluenviron/mediamtx/releases/download/v${LATEST}/${TARBALL}"
|
|
echo "==> Downloading $TARBALL..."
|
|
curl -fsSL "$URL" -o "/tmp/$TARBALL"
|
|
echo "==> Installing to /usr/local/bin..."
|
|
sudo tar -xzf "/tmp/$TARBALL" -C /usr/local/bin mediamtx
|
|
rm "/tmp/$TARBALL"
|
|
echo " Installed: $(mediamtx --version 2>&1 | head -1)"
|
|
fi
|
|
|
|
echo "==> Writing MediaMTX config to $MEDIAMTX_CONF..."
|
|
sudo mkdir -p "$(dirname "$MEDIAMTX_CONF")"
|
|
sudo tee "$MEDIAMTX_CONF" > /dev/null << YAMLEOF
|
|
###############################################################################
|
|
# MediaMTX config for TechDJ
|
|
# Generated by setup_mediamtx.sh
|
|
###############################################################################
|
|
|
|
logLevel: info
|
|
logDestinations: [stdout]
|
|
|
|
# Disable unused protocols
|
|
rtmp: false
|
|
webrtc: false
|
|
|
|
# HLS output
|
|
hlsAddress: :${HLS_PORT}
|
|
hlsVariant: lowLatency
|
|
hlsSegmentDuration: 1s
|
|
hlsPartDuration: 200ms
|
|
|
|
# SRT input
|
|
srtAddress: :${SRT_PORT}
|
|
|
|
# Paths
|
|
paths:
|
|
${SRT_PATH}:
|
|
runOnReady: >-
|
|
curl -s -X POST http://127.0.0.1:${LISTENER_PORT}/api/webhook
|
|
-H "Content-Type: application/json"
|
|
-d "{\"event\":\"publish\",\"path\":\"${SRT_PATH}\",\"source\":{\"remoteAddr\":\"\$MTX_QUERY\"}}"
|
|
runOnNotReady: >-
|
|
curl -s -X POST http://127.0.0.1:${LISTENER_PORT}/api/webhook
|
|
-H "Content-Type: application/json"
|
|
-d "{\"event\":\"unpublish\",\"path\":\"${SRT_PATH}\"}"
|
|
YAMLEOF
|
|
echo " Config written."
|
|
|
|
echo "==> Writing systemd service..."
|
|
sudo tee /etc/systemd/system/mediamtx.service > /dev/null << 'SVCEOF'
|
|
[Unit]
|
|
Description=MediaMTX Real-time Media Server
|
|
After=network.target
|
|
|
|
[Service]
|
|
ExecStart=/usr/local/bin/mediamtx /usr/local/etc/mediamtx/mediamtx.yml
|
|
Restart=always
|
|
RestartSec=5
|
|
StandardOutput=journal
|
|
StandardError=journal
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
SVCEOF
|
|
|
|
echo "==> Enabling and starting mediamtx service..."
|
|
sudo systemctl daemon-reload
|
|
sudo systemctl enable mediamtx
|
|
sudo systemctl restart mediamtx
|
|
|
|
echo "==> Opening firewall ports..."
|
|
if command -v ufw &>/dev/null; then
|
|
sudo ufw allow "${SRT_PORT}/udp" && echo " UFW: opened ${SRT_PORT}/udp (SRT)"
|
|
sudo ufw allow "${HLS_PORT}/tcp" && echo " UFW: opened ${HLS_PORT}/tcp (HLS)"
|
|
else
|
|
echo " UFW not found — open ports ${SRT_PORT}/udp and ${HLS_PORT}/tcp manually."
|
|
fi
|
|
|
|
echo ""
|
|
echo "==> Waiting for service to start..."
|
|
sleep 2
|
|
sudo systemctl status mediamtx --no-pager | head -20
|
|
|
|
echo ""
|
|
echo "================================================================"
|
|
echo " MediaMTX setup complete!"
|
|
echo " SRT ingest : srt://$(hostname -f):${SRT_PORT}?streamid=${SRT_PATH}"
|
|
echo " HLS output : http://$(hostname -f):${HLS_PORT}/${SRT_PATH}/index.m3u8"
|
|
echo " Webhook : http://127.0.0.1:${LISTENER_PORT}/api/webhook"
|
|
echo "================================================================"
|