Fehler 1004 tritt in BigBlueButton auf, wenn die WebSocket-Verbindung zu FreeSWITCH zwar erfolgreich hergestellt wurde, die eigentliche Audioverbindung (SIP-Anruf bzw. ICE-Aushandlung) aber scheitert. Das bedeutet: Der Verbindungsaufbau beginnt, bricht jedoch ab, bevor Audio übertragen werden kann. Betroffene Teilnehmer hören und sprechen nichts; im Audiomodal erscheint die Fehlermeldung mit dem Code 1004, häufig ergänzt durch einen Hinweis wie „ICE Error” oder „SIP Failure Code”.
Wie äußert sich der Fehler?
Beim Versuch, dem Meeting mit aktivem Mikrofon beizutreten, schlägt die Verbindung fehl. Das Audiomodal von BigBlueButton zeigt den Fehlercode 1004 an, optional mit einer Zusatzangabe in Klammern (z. B. ICE Error, SIP Failure Code oder INCOMPATIBLE_DESTINATION). Eine Teilnahme im Nur-Zuhören-Modus (Listen-Only) ist in vielen Fällen weiterhin möglich, da dieser Modus keinen vollständigen WebRTC-Mediapfad benötigt.
Mögliche Ursachen
- STUN-Server nicht erreichbar: FreeSWITCH verwendet standardmäßig
stun.freeswitch.org, einen öffentlichen Dienst, der unzuverlässig sein kann. Ist er nicht erreichbar, ermittelt FreeSWITCH seine öffentliche IP-Adresse nicht korrekt. - Falsches externe IP-Konfiguration: Die Einträge
external_rtp_ipoderexternal_sip_ipinvars.xmlzeigen auf eine private statt auf die öffentliche IP-Adresse des Servers. - UDP-Ports gesperrt: Die für RTP-Mediadaten benötigten UDP-Ports 16384–32768 sind durch eine Firewall oder Cloud-Sicherheitsgruppe geblockt.
- Kein TURN-Server vorhanden: Teilnehmer hinter einem strengen NAT oder einem symmetrischen NAT können keine direkte Verbindung aufbauen und benötigen einen TURN-Relay-Server.
- IPv6-Probleme: IPv6 ist auf dem Server nicht verfügbar, FreeSWITCH versucht jedoch, IPv6-ICE-Kandidaten zu nutzen.
- Firefox-Inkompatibilität: Firefox unterstützt ICE-Lite (genutzt ab BBB 2.5+) nicht vollständig, was in bestimmten Netzwerktopologien zu Fehler 1004 führen kann, während Chrome oder Edge problemlos funktionieren.
- Android Chrome (bekannter Bug): Auf Android 11 mit Chrome schlägt die ICE-Kandidatensammlung in BBB 2.4 fehl (GitHub Issue #14136).
Lösungen
Für Teilnehmer
- Erneut versuchen: Schließen Sie das Audiomodal und versuchen Sie, dem Audio erneut beizutreten. Vorübergehende Netzwerkprobleme lassen sich so oft beheben.
- Nur-Zuhören-Modus wählen: Falls das Mikrofon nicht zwingend benötigt wird, wählen Sie im Audiomodal „Nur zuhören”. Dieser Modus ist robuster gegenüber Verbindungsproblemen.
- Browser wechseln: Testen Sie Google Chrome oder Microsoft Edge, besonders wenn Sie Firefox verwenden. Bei Firefox können ICE-Kompatibilitätsprobleme auftreten.
- Netzwerk prüfen: Verbinden Sie sich nach Möglichkeit über ein anderes Netzwerk (z. B. vom mobilen Hotspot statt aus dem Firmennetzwerk). Strenge Firewalls oder VPNs können UDP-Datenverkehr blockieren.
- Android-Nutzer: Wenn Sie Android 11 mit Chrome verwenden und Fehler 1004 erhalten, wechseln Sie zu Firefox für Android oder nutzen Sie die offizielle BBB-App.
Für Administratoren
- Externe IP in vars.xml korrigieren: Ersetzen Sie den unzuverlässigen STUN-Server durch die feste öffentliche IP-Adresse des Servers. Bearbeiten Sie dazu
/opt/freeswitch/conf/vars.xmlund setzen Sieexternal_rtp_ipsowieexternal_sip_ipauf die tatsächliche öffentliche IPv4-Adresse. Tragen Sie die Änderung zusätzlich in/etc/bigbluebutton/bbb-conf/apply-config.shein, damit sie nach Updates erhalten bleibt. - UDP-Ports freigeben: Öffnen Sie den UDP-Bereich 16384–32768 in der Firewall (
ufw,iptablesoder Cloud-Sicherheitsgruppe). Außerdem müssen TCP-Port 80 und 443 erreichbar sein. - TURN-Server einrichten: Installieren Sie coturn auf einem separaten Server und konfigurieren Sie BBB über
/etc/bigbluebutton/turn-stun-servers.xml. Ab BBB 2.6 wird coturn bei der Installation mitbbb-install.shautomatisch eingerichtet. Ein funktionierender TURN-Server löst die meisten ICE-Fehler bei Nutzern hinter restriktivem NAT. - IPv6-SIP-Profile deaktivieren (falls IPv6 nicht vorhanden): Prüfen Sie mit
ip addr | grep inet6, ob IPv6 auf dem Server aktiv ist. Wenn nicht, benennen Sie die Profileinternal-ipv6.xmlundexternal-ipv6.xmlin FreeSWITCH in.disabledum und starten Sie BBB neu. - TURN-Relay für Firefox erzwingen (BBB 2.5+): Setzen Sie in
/etc/bigbluebutton/bbb-html5.ymlden Wertpublic.kurento.forceRelayOnFirefox: trueund starten Sie BBB mitsudo bbb-conf --restartneu. - BBB-Konfiguration prüfen (BBB 2.5+): Ab BBB 2.5 kommt mediasoup zum Einsatz. Prüfen Sie in
/etc/bigbluebutton/bbb-webrtc-sfu/production.yml, obannouncedIpkorrekt auf die öffentliche IP gesetzt ist. - Diagnosewerkzeuge nutzen: Öffnen Sie in Chrome
chrome://webrtc-internals/und prüfen Sie die ICE-Kandidatenpaare. Zeigt die Remote-Kandidatenliste eine private IP-Adresse, sendet FreeSWITCH eine falsche IP im SDP. In Firefox finden Sie vergleichbare Informationen unterabout:webrtc.
Verwandte Fehlercodes
Fehler 1004 tritt häufig in Kombination mit anderen Audiofehlern auf oder wird mit ihnen verwechselt. Fehler 1002 (WebSocket-Verbindung fehlgeschlagen) deutet auf ein früheres Problem im Verbindungsaufbau hin – die WebSocket-Verbindung kommt nicht einmal zustande. Fehler 1007 (ICE-Negotiation-Fehler) ist eng verwandt und betrifft ebenfalls fehlschlagende ICE-Verbindungen, tritt jedoch in einem leicht anderen Kontext auf. Bei Fehler 1003 (Verbindungsabbruch) hingegen war die Audioverbindung zunächst erfolgreich, brach dann aber während der Sitzung ab.
Technische Details: Warum schlägt ICE fehl?
Fehler 1004 tritt in der SIP/ICE-Aushandlungsschicht auf – nach dem Öffnen der WebSocket-Verbindung, aber bevor Mediendaten fließen. Der Browser sendet ein SIP INVITE mit einem SDP-Angebot (inklusive ICE-Kandidaten) über WebSocket. FreeSWITCH verarbeitet das SDP, sammelt eigene ICE-Kandidaten und sendet eine SDP-Antwort zurück. Anschließend prüfen beide Seiten UDP-Pfade (ICE Connectivity Checks). Schlägt dieser Prozess fehl – weil FreeSWITCH das SDP ablehnt oder kein gültiges ICE-Kandidatenpaar gefunden wird – wird Fehler 1004 ausgelöst. BBB erzwingt dabei ein Zeitlimit von 5 Sekunden für die ICE-Kandidatensammlung; in Hochlatenz-Netzwerken kann der Browser ein SDP ohne Kandidaten senden, bevor das Zeitlimit abläuft.
