Add RTL-SDR mode switcher, DVB-T to Kodi pipeline, FM radio
Mode switcher (rtl_mode_switch.sh) handles exclusive dongle access between DVB-T, FM, SDR scanner, ADS-B, spectrum, and HackRF modes. DVB-T pipeline: RTL-SDR -> GNU Radio demod -> MPEG-TS -> HTTP -> Kodi. Kodi setup script generates M3U playlist for PVR IPTV Simple Client. Includes dvbt_rx.py and sdr_tv.py from dvbt-rx project. WebUI updated with mode switcher, channel selector, and Kodi controls.
This commit is contained in:
168
scripts/kodi_dvbt_setup.sh
Executable file
168
scripts/kodi_dvbt_setup.sh
Executable file
@@ -0,0 +1,168 @@
|
||||
#!/system/bin/sh
|
||||
# Kodi DVB-T Live TV Setup
|
||||
#
|
||||
# Sets up the pipeline: RTL-SDR -> DVB-T demod -> MPEG-TS -> HTTP -> Kodi
|
||||
#
|
||||
# Kodi PVR connection:
|
||||
# 1. Install "PVR IPTV Simple Client" addon in Kodi
|
||||
# 2. Configure M3U playlist URL: http://127.0.0.1:8554/dvbt.m3u
|
||||
# 3. Or add single channel: http://127.0.0.1:8554
|
||||
#
|
||||
# This script generates the M3U playlist from configured channels
|
||||
# and starts the DVB-T HTTP stream server.
|
||||
|
||||
MODDIR="/data/adb/modules/driver-manager"
|
||||
CONFDIR="$MODDIR/config"
|
||||
STREAMDIR="$MODDIR/streams"
|
||||
LOGFILE="$MODDIR/driver-manager.log"
|
||||
KODI_PORT=$(cat "$CONFDIR/kodi_stream_port" 2>/dev/null || echo "8554")
|
||||
CHANNELS_FILE="$CONFDIR/dvbt_channels.conf"
|
||||
|
||||
mkdir -p "$STREAMDIR"
|
||||
|
||||
mlog() {
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') [kodi] $1" >> "$LOGFILE"
|
||||
}
|
||||
|
||||
# Generate M3U playlist from channel config
|
||||
# Format of dvbt_channels.conf:
|
||||
# # Channel Name | Frequency (Hz) | Bandwidth | TX Mode | Constellation | Code Rate | Guard
|
||||
# BBC One|506000000|8|8k|64qam|2/3|1/32
|
||||
# ITV|514000000|8|8k|64qam|2/3|1/32
|
||||
generate_m3u() {
|
||||
M3U="$STREAMDIR/dvbt.m3u"
|
||||
echo '#EXTM3U' > "$M3U"
|
||||
|
||||
if [ ! -f "$CHANNELS_FILE" ]; then
|
||||
# Create default channel config
|
||||
cat > "$CHANNELS_FILE" << 'CHANNELS'
|
||||
# DVB-T Channel List
|
||||
# Format: Name|Frequency(Hz)|Bandwidth(MHz)|TxMode|Constellation|CodeRate|Guard
|
||||
# Edit this file to add your local channels
|
||||
# Find channels with: rtl_mode_switch.sh spectrum (then check results)
|
||||
#
|
||||
# Example channels (UK Freeview):
|
||||
Channel 1|506000000|8|8k|64qam|2/3|1/32
|
||||
Channel 2|514000000|8|8k|64qam|2/3|1/32
|
||||
Channel 3|522000000|8|8k|64qam|2/3|1/32
|
||||
CHANNELS
|
||||
mlog "Created default channel config at $CHANNELS_FILE"
|
||||
fi
|
||||
|
||||
CH_NUM=1
|
||||
while IFS='|' read -r NAME FREQ BW TXMODE CONST CR GUARD; do
|
||||
# Skip comments and empty lines
|
||||
case "$NAME" in
|
||||
\#*|"") continue ;;
|
||||
esac
|
||||
|
||||
# Each channel gets its own stream port
|
||||
CH_PORT=$((KODI_PORT + CH_NUM))
|
||||
echo "#EXTINF:-1,$NAME" >> "$M3U"
|
||||
echo "http://127.0.0.1:$CH_PORT" >> "$M3U"
|
||||
CH_NUM=$((CH_NUM + 1))
|
||||
done < "$CHANNELS_FILE"
|
||||
|
||||
mlog "Generated M3U playlist: $M3U ($((CH_NUM - 1)) channels)"
|
||||
}
|
||||
|
||||
# Start a stream server for a specific channel
|
||||
# Called when Kodi connects to a channel URL
|
||||
start_channel_stream() {
|
||||
CH_PORT=$1
|
||||
FREQ=$2
|
||||
BW=$3
|
||||
TXMODE=$4
|
||||
CONST=$5
|
||||
CR=$6
|
||||
GUARD=$7
|
||||
CH_NAME=$8
|
||||
|
||||
TERMUX="/data/data/com.termux/files/usr/bin"
|
||||
SDR_TV="$MODDIR/scripts/sdr_tv.py"
|
||||
|
||||
FIFO="$STREAMDIR/ch_${CH_PORT}.ts"
|
||||
rm -f "$FIFO"
|
||||
mkfifo "$FIFO" 2>/dev/null
|
||||
|
||||
if [ -x "$TERMUX/python3" ] && [ -f "$SDR_TV" ]; then
|
||||
# Start DVB-T demodulator
|
||||
"$TERMUX/python3" "$SDR_TV" dvbt \
|
||||
--freq "$FREQ" \
|
||||
--bandwidth "$BW" \
|
||||
--transmission-mode "$TXMODE" \
|
||||
--constellation "$CONST" \
|
||||
--code-rate "$CR" \
|
||||
--guard-interval "$GUARD" \
|
||||
> "$FIFO" 2>>"$LOGFILE" &
|
||||
DVB_PID=$!
|
||||
|
||||
# HTTP stream server for this channel
|
||||
(while true; do
|
||||
(echo -e "HTTP/1.1 200 OK\r\nContent-Type: video/mp2t\r\nTransfer-Encoding: chunked\r\nConnection: close\r\n\r"; cat "$FIFO") | \
|
||||
nc -l -p "$CH_PORT" 2>/dev/null
|
||||
# If Kodi disconnects, kill the demodulator
|
||||
kill "$DVB_PID" 2>/dev/null
|
||||
break
|
||||
done) &
|
||||
|
||||
mlog "Channel stream started: $CH_NAME on port $CH_PORT (freq=$FREQ)"
|
||||
else
|
||||
mlog "ERROR: python3 or sdr_tv.py not found for channel stream"
|
||||
fi
|
||||
}
|
||||
|
||||
# Serve M3U playlist on the base port
|
||||
serve_m3u() {
|
||||
M3U="$STREAMDIR/dvbt.m3u"
|
||||
(while true; do
|
||||
M3U_CONTENT=$(cat "$M3U" 2>/dev/null)
|
||||
RESPONSE="HTTP/1.1 200 OK\r\nContent-Type: audio/x-mpegurl\r\nContent-Length: ${#M3U_CONTENT}\r\nConnection: close\r\n\r\n${M3U_CONTENT}"
|
||||
echo -e "$RESPONSE" | nc -l -p "$KODI_PORT" 2>/dev/null
|
||||
done) &
|
||||
mlog "M3U server on port $KODI_PORT"
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
setup)
|
||||
generate_m3u
|
||||
serve_m3u
|
||||
mlog "Kodi DVB-T setup complete"
|
||||
mlog "Add to Kodi PVR IPTV Simple Client:"
|
||||
mlog " M3U URL: http://127.0.0.1:$KODI_PORT/dvbt.m3u"
|
||||
echo "Kodi setup complete."
|
||||
echo "In Kodi: Settings > PVR & Live TV > PVR IPTV Simple Client"
|
||||
echo "M3U URL: http://127.0.0.1:$KODI_PORT/dvbt.m3u"
|
||||
;;
|
||||
scan)
|
||||
# Scan for DVB-T channels using spectrum analysis
|
||||
echo "Scanning for DVB-T channels..."
|
||||
echo "Common DVB-T frequency ranges:"
|
||||
echo " VHF Band III: 174-230 MHz"
|
||||
echo " UHF Band IV: 470-582 MHz"
|
||||
echo " UHF Band V: 582-862 MHz"
|
||||
echo ""
|
||||
echo "Starting spectrum scan on UHF band..."
|
||||
"$MODDIR/scripts/rtl_mode_switch.sh" spectrum
|
||||
echo "Check $MODDIR/streams/spectrum_data.csv for results"
|
||||
;;
|
||||
channels)
|
||||
# List configured channels
|
||||
if [ -f "$CHANNELS_FILE" ]; then
|
||||
echo "Configured DVB-T channels:"
|
||||
grep -v "^#" "$CHANNELS_FILE" | grep -v "^$" | while IFS='|' read -r NAME FREQ BW TXMODE CONST CR GUARD; do
|
||||
FREQ_MHZ=$(echo "scale=1; $FREQ / 1000000" | bc 2>/dev/null || echo "$FREQ")
|
||||
echo " $NAME — ${FREQ_MHZ} MHz (${BW}MHz BW, $TXMODE, $CONST, $CR, $GUARD)"
|
||||
done
|
||||
else
|
||||
echo "No channels configured. Edit: $CHANNELS_FILE"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo "Usage: kodi_dvbt_setup.sh {setup|scan|channels}"
|
||||
echo ""
|
||||
echo " setup - Generate M3U and start stream servers"
|
||||
echo " scan - Scan spectrum for DVB-T channels"
|
||||
echo " channels - List configured channels"
|
||||
;;
|
||||
esac
|
||||
Reference in New Issue
Block a user