Zwei-Wege-Audio¶
Die G4 bietet über HAP sowohl einen Microphone- als auch einen Speaker-Dienst an. Der Rückkanal zum Lautsprecher der Außeneinheit ist damit spezifikationsgemäß vorgesehen und am untersuchten Gerät nachgewiesen: Der Lautsprecher gibt aus, was ein Controller ihm über die ausgehandelte Sitzung sendet.
Die Codec-Kette¶
HomeKit überträgt Audio in beide Richtungen als AAC-ELD (Enhanced Low Delay) in einer SRTP-Sitzung. Die Kette für einen Ton aus einer Webanwendung sieht daher so aus:
Quelle (Browser/Datei)
│ G.711 (PCMU/PCMA, 8 kHz)
▼
Medienserver: G.711-Dekodierung + Abtastratenwandlung 8 → 16 kHz
│ PCM 16 bit / 16 kHz
▼
AAC-ELD-Kodierer
│ AAC-ELD
▼
SRTP ──────────────────► Lautsprecher der Außeneinheit
| Parameter des Kodierers | Sollwert |
|---|---|
| Frame-Länge | 480 |
| Audio Specific Config | f8f03000 |
Die Bibliotheksversion des Kodierers ist kritisch
Ältere Versionen verbreiteter AAC-Bibliotheken lehnen die für AAC-ELD nötige Betriebsart ab (beobachtet: Fehler bei der Konfiguration der SBR-Betriebsart). Die in Distributionen mitgelieferte Fassung ist dafür teils zu alt; der Kodierer muss dann aus der Quelle übersetzt werden. Erkennbar ist der Erfolg an den beiden Sollwerten oben.
Warum die meisten Implementierungen keinen Rückkanal haben¶
Die HAP-Aushandlung ist in gängigen quelloffenen Implementierungen bereits bidirektional: Beim Sitzungsaufbau legt der Endpunktaustausch Adresse, Port, SSRC und Schlüssel der Gegenrichtung ab, und die SRTP-Schicht kann dorthin senden. Was fehlt, ist in der Regel lediglich die Verbindung dieser vorhandenen Teile — die Möglichkeit, eine Tonquelle an das ausgehende Medium des Geräts anzuhängen.
„Geht nicht" heißt oft „ist nicht zusammengeschaltet"
Die verbreitete Aussage, ein bestimmter Medienserver könne keinen HomeKit-Rückkanal, beschreibt den Auslieferungszustand, nicht eine Grenze des Protokolls oder des Geräts. Der fehlende Teil ist klein und liegt auf der Seite des Servers.
Der Codec-Abgleich ist die eigentliche Hürde¶
Kein Transkodieren beim Zusammenschalten
Medienserver koppeln die sendenden Medien von Quelle und Ziel typischerweise allein über Codec-Gleichheit. An dieser Stelle wird nicht umgewandelt.
Praktische Folge: Ein Browser, der Opus anbietet, findet an einem Gerätemedium, das nur AAC-ELD führt, keinen Rückkanal — die Sitzung kommt zustande, es ist nur still. Das ist die häufigste Ursache für „verbunden, aber der Lautsprecher bleibt stumm".
Ein gangbarer Weg ist, dem Browser G.711 (PCMU/PCMA) anzubieten: Browser können das nativ senden, und die Umwandlung nach PCM 16 bit/16 kHz ist in vielen Serverbibliotheken bereits enthalten. Der Preis ist die Bandbegrenzung von G.711 — die Sprachqualität ist hörbar telefonartig.
Ein Messverfahren, das ein Teilproblem herausnimmt¶
Beim Aufbau eines Rückkanals liegen zwei ungeklärte Teile in Reihe: Transport (kommen Pakete an und akzeptiert sie das Gerät?) und Kodierung (ist der Datenstrom gültig?). Fällt der Test negativ aus, ist unklar, welcher der beiden schuld ist.
Ein Rückspielversuch trennt beides: Nimmt man die vom Gerät selbst gesendeten AAC-ELD-Frames auf und schickt exakt diese unverändert zurück, prüft der Versuch allein den Transport — und braucht dafür noch gar keinen eigenen Kodierer.
Verallgemeinerbare Regel
Liegen zwei unbekannte Teile in Reihe, suche den Versuch, der einen davon aus der Kette nimmt. Hier war das der Grund, warum der Transport nachweisbar war, bevor das schwierigere Kodierungsproblem gelöst war.
Beobachtungen für die Umsetzung im Browser¶
Wer eine eigene Gegensprech-Oberfläche baut, wird auf folgende Punkte stoßen. Sie betreffen den Browser, nicht das Gerät, entscheiden aber über die Brauchbarkeit:
- Sprechen auf Tastendruck ohne Neuverhandlung. Ein Transceiver lässt sich ohne Spur anlegen und der Mikrofon-Spur erst beim Drücken zuweisen. Weil dabei nicht neu verhandelt wird, bleibt das Videobild stehen. Der Ruhezustand zeigt sich als drittes Medium ohne empfangene Daten — das ist kein Fehler.
- Die Spur wirklich trennen, nicht nur stumm schalten. Wird die Spur lediglich deaktiviert, bleibt das Mikrofon belegt und der Empfangszähler läuft weiter — und damit entfällt das einzige objektive Prüfmittel dafür, ob gerade gesendet wird.
- Fokusverlust ist kein brauchbares Abschaltsignal. In eingebetteten Ansichten löst bereits der Berechtigungsdialog des Systems einen Fokuswechsel aus; ein daran gekoppeltes Abschalten beendet das Sprechen, obwohl die Taste gehalten wird. Das Ereignis für Seite nicht mehr sichtbar trifft den gemeinten Fall dagegen genau.
- Alle Abbruchwege auf eine idempotente Abschaltfunktion führen — Zeigerabbruch, Sichtbarkeitswechsel, Seitenwechsel und eine harte Zeitgrenze.