diff --git a/app/main.py b/app/main.py index b92055c..73b1e59 100644 --- a/app/main.py +++ b/app/main.py @@ -12,8 +12,10 @@ import time import os import threading from flask import Flask, Response, render_template, request, jsonify +from flask_sock import Sock app = Flask(__name__) +sock = Sock(app) STREAM_WIDTH = 1280 STREAM_HEIGHT = 720 @@ -105,56 +107,40 @@ def stream(): # --------------------------------------------------------------------------- -# Audio-Stream (Ogg/Opus via ffmpeg) +# Audio-Stream via WebSocket (Raw PCM โ†’ Web Audio API) +# Minimale Latenz: kein HTTP-Buffering, kein Codec-Delay # --------------------------------------------------------------------------- AUDIO_DEVICE = "plughw:2,0" AUDIO_SAMPLERATE = 16000 +AUDIO_CHUNK = 512 # ~32ms bei 16kHz -def generate_audio(): - cmd = [ - "ffmpeg", - "-fflags", "nobuffer", - "-flags", "low_delay", - "-f", "alsa", - "-thread_queue_size", "128", - "-i", AUDIO_DEVICE, - "-ar", str(AUDIO_SAMPLERATE), - "-ac", "1", - "-c:a", "libopus", - "-b:a", "24k", - "-frame_duration", "20", - "-page_duration", "20000", - "-flush_packets", "1", - "-f", "ogg", - "-", - ] +@sock.route("/audio-ws") +def audio_ws(ws): process = subprocess.Popen( - cmd, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL + [ + "arecord", + "-D", AUDIO_DEVICE, + "-f", "S16_LE", + "-r", str(AUDIO_SAMPLERATE), + "-c", "1", + ], + stdout=subprocess.PIPE, + stderr=subprocess.DEVNULL, ) try: while True: - chunk = process.stdout.read(4096) + chunk = process.stdout.read(AUDIO_CHUNK) if not chunk: break - yield chunk + ws.send(chunk) + except Exception: + pass finally: process.kill() -@app.route("/audio") -def audio(): - return Response( - generate_audio(), - mimetype="audio/ogg; codecs=opus", - headers={ - "Cache-Control": "no-cache, no-store", - "X-Accel-Buffering": "no", - }, - ) - - # --------------------------------------------------------------------------- # WLAN-Verwaltung # --------------------------------------------------------------------------- diff --git a/app/templates/live.html b/app/templates/live.html index 8155cd1..42e8589 100644 --- a/app/templates/live.html +++ b/app/templates/live.html @@ -167,7 +167,6 @@ โš™ Einstellungen -