
Icecast hat eine praktische Status-Webseite als JSON-File: http://icecast-ip:8000/status-json.xsl (btw: keine Authentifizierung notwendig). Über die kann man diverse Icecast-Parameter abfragen und ein paar LEDs ansteuern. Ich habe insgesamt drei LEDs (die erste Blaue ist für On/Off). Die zweite Blaue zeigt an, ob der Stream eingeschaltet ist (GPIO 21) und die Gelbe zeigt an, ob grade Zuhörer (Listener) aktiv sind (GPIO 16).
Anbei Movie, das die Listener-Funktion illustriert, VLC startet hier den Stream.
import time
import requests
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
LED_STREAM = 21 # Stream active
LED_LISTENERS = 16 # Listeners present
GPIO.setup(LED_STREAM, GPIO.OUT)
GPIO.setup(LED_LISTENERS, GPIO.OUT)
URL = "http://localhost:8000/status-json.xsl"
def get_status():
try:
r = requests.get(URL, timeout=2)
data = r.json()
source = data["icestats"].get("source")
if not source:
return False, 0
# handle multiple mountpoints
if isinstance(source, list):
source = source[0]
listeners = source.get("listeners", 0)
return True, listeners
except:
return False, 0
while True:
stream_on, listeners = get_status()
# LED 1: Stream running
GPIO.output(LED_STREAM, GPIO.HIGH if stream_on else GPIO.LOW)
# LED 2: Listeners connected
GPIO.output(LED_LISTENERS, GPIO.HIGH if listeners > 0 else GPIO.LOW)
time.sleep(5)