first commit

This commit is contained in:
duffyduck
2026-08-22 20:34:42 +02:00
commit 9546b9a4c6
1586 changed files with 172520 additions and 0 deletions
+81
View File
@@ -0,0 +1,81 @@
# Miracast-Sender für Linux
Spiegelt den Bildschirm auf einen Fernseher, der im Screen-Mirroring-Modus auf
eine Verbindung wartet. Am Fernseher muss nichts eingetippt werden.
```bash
sudo ./miracast-cast check # Voraussetzungen prüfen
sudo ./miracast-cast scan # Fernseher suchen
sudo ./miracast-cast cast # verbinden und spiegeln
```
## Warum das hier bessere Chancen hat als die Android-App
Damit ein Fernseher eine Miracast-Sitzung annimmt, muss sich der Sender als
*Wi-Fi-Display-Quelle* ausweisen ein besonderes Kennzeichen in den
WLAN-Suchpaketen. Auf Android ist das `CONFIGURE_WIFI_DISPLAY` und bleibt
Systemapps vorbehalten; genau daran scheitert die App dort.
Unter Linux lässt sich dasselbe über `wpa_supplicant` setzen:
```
SET wifi_display 1
WFD_SUBELEM_SET 0 0006 0010 1c44 0032
│ │ └── 50 Mbit/s Durchsatz
│ └─────── Port 7236 für die Steuerverbindung
└──────────── Typ „Quelle“, Sitzung verfügbar
```
Deshalb sollte der Fernseher uns hier als das erkennen, was wir sind.
## Voraussetzungen
* WLAN-Karte, die Wi-Fi Direct beherrscht (`iw list` muss `P2P-GO` und
`P2P-client` aufführen)
* `wpa_supplicant` mit erreichbarem Control-Socket
* `ffmpeg`
* Rootrechte (der Control-Socket gehört root)
* Ein DHCP-Client (`dhclient`, `udhcpc` oder `dhcpcd`) in der
Wi-Fi-Direct-Gruppe holt sich der Rechner darüber seine Adresse
Verwaltet NetworkManager die WLAN-Karte, muss er sie loslassen:
```bash
nmcli device set wlan0 managed no
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf -C /run/wpa_supplicant
```
## Nützliche Schalter
| Schalter | Wirkung |
|---|---|
| `--source test` | schickt ein Testbild statt des Bildschirms gut zum Ausprobieren |
| `--source x11` / `--display :0` | bestimmter X11-Bildschirm |
| `--source kms` | für Wayland-Sitzungen (braucht erweiterte Rechte) |
| `--bitrate 12` | Bitrate in Mbit/s |
| `--max-height 720` | begrenzt die Auflösung, spart Funkbandbreite |
| `--peer AA:BB:…` | direkt eine bekannte MAC ansprechen, ohne Suche |
| `-v` | ausführliche Ausgabe samt RTSP-Verkehr |
## Wie es abläuft
1. `wpa_supplicant` meldet uns als Wi-Fi-Display-Quelle an
2. Wi-Fi Direct sucht Geräte; Fernseher melden sich als „Bildschirm“
3. **Zuerst** öffnet sich der Steuerkanal auf Port 7236 der Fernseher meldet
sich nämlich von sich aus, sobald die Gruppe steht
4. `P2P_CONNECT` baut die Direktverbindung auf, DHCP liefert die Adresse
5. Der Fernseher ruft an; es folgt der Handshake M1M7 mit Formatabsprache
6. `ffmpeg` nimmt auf, wandelt in H.264, verpackt in MPEG-TS und schickt es
als RTP hinüber
## Tests
```bash
python3 -m unittest discover -s tests -v
```
Der Durchlauf in `tests/test_end_to_end.py` baut einen Fernseher nach, der sich
wie ein echtes Gerät verhält: Er ruft an, führt den kompletten Handshake und
empfängt anschließend echtes Video, das mit `ffprobe` geprüft wird. Nicht
abgedeckt ist die Wi-Fi-Direct-Verbindung selbst dafür braucht es
WLAN-Hardware.