Mumble verwendet, bedingt duch die Entwicklung, in der aktuellen Version 1.2.4 mehrere Codecs; siehe auch Codecs ab Mumble 1.2.4.
Welcher Codec letzlich auf einem Server verwendet wird, entscheidet sich anhand des kleinsten gemeinsamen Nenners; dieser ist aktuell CELT 0.7.0. Dabei findet die Aushandlung (Details siehe unten) über die Wahl des Codecs nicht etwa pro Kanal statt, sondern pro Server. Dies resultiert daraus, dass man in Mumble flüstern kann; wenn da jeder mit einem anderen Codec sendet, ist durcheinander vorprogrammiert.
Wertigkeit der Codecs bei der Aushandlung (von oben nach unten, ab Mumble 1.2.4): 1)
Der kleinste gemeinsame Nenner ist also immer CELT 0.7.0.
Verwendet wird letzlich der Codec, den alle auf dem Server haben. Im Umkehrschluss bedeutet dies, dass die besseren Codec nur dann verwendet werden können, wenn auch jeder Client diese unterstützt. Wird auf einem Server z. B. gerade Opus verwendet und ein neuer Benutzer betritt den Server, der nur CELT 0.7.0 verwendet, so wechseln in diesem Moment alle Benutzer des Servers auf den niedrigeren Codec um.
Bis einschließlich Version 1.2.3 kann man dieses Verhalten nicht beeinflussen, was wegen vereinzelter Benutzer immer sehr nervig war.
Dies wurde bei der Einführung von Opus (in Mumble 1.2.4) bedacht und die neue Servereinstellung opusthreshold hinzugefügt. Mit dieser lässt sich die automatische Codec-Aushandlung beeinflussen. So kann man z. B. mit dem Wert opusthreshold=80 erreichen, dass der Opus-Codec erzwungen wird, wenn 80 Prozent der Benutzer auf dem Server den neuen Codec unterstützen.
Würde ohne diesen Wert auf einem Server gerade Opus verwendet werden, und ein neuer Benutzer käme auf den Server ohne Opus, so würde automatisch auf CELT umgeschaltet werden.
Der Code für die Umschaltung auf Opus ist folgender: 3)
bool enableOpus = ((opus * 100 / users) >= iOpusThreshold);
Wenn Opus gerade auf einem Server verwendet wird, so werden alle Pakete, die nicht Opus sind, vom Server verworfen.
Die Codec-Umschaltung findet ab 1.2.4 nicht nur statt beim Verbinden eines Benutzers sondern auch dann, wenn ein Benutzer den Server verlässt.
In der Serverlog steht dann sowas hier:
Umschaltung auf Opus:
<W>2012-06-26 13:13:05.571 1 => CELT codec switch ffffffff8000000b ffffffff80000010 (prefer ffffffff80000010) (Opus 1)
Umschaltung von CELT 0.11.0 nach 0.7.0:
<W>2011-05-13 20:46:26.684 1 => CELT codec switch ffffffff8000000b ffffffff80000010 (prefer ffffffff8000000b) (Opus 0)
Umschaltung von CELT 0.7.0 nach 0.11.0:
<W>2012-06-26 13:13:05.571 1 => CELT codec switch ffffffff8000000b ffffffff80000010 (prefer ffffffff80000010) (Opus 0)