Signatur
Beschreibung
getParameters() liefert eine Momentaufnahme der Sendeparameter eines RTCRtpSender: Codier-Einstellungen (encodings) wie maximale Bitrate, Bildrate, Skalierungsfaktor, Priorität und Aktiv-Status, dazu die ausgehandelten codecs, die RTP-Header-Erweiterungen (headerExtensions), RTCP-Informationen (rtcp) und eine transactionId.
Wichtigster Einsatzzweck ist das Lesen-Ändern-Schreiben zusammen mit setParameters(). So lässt sich etwa die Video-Bitrate an die verfügbare Bandbreite anpassen, eine Simulcast-Ebene abschalten oder die Auflösung reduzieren – ohne neue SDP-Aushandlung.
Das zurückgegebene Objekt ist eine Kopie. Änderungen daran wirken sich erst aus, wenn es an setParameters() übergeben wird. Dabei muss die transactionId zum zuletzt gelesenen Stand passen, deshalb sollte vor jedem setParameters() ein frischer getParameters()-Aufruf stehen.
Rückgabewert
encodings (Array von RTCRtpEncodingParameters), transactionId, codecs, headerExtensions, rtcp sowie optional degradationPreference.Beispiele
Aktuelle Sendeparameter ausgeben
const pc = new RTCPeerConnection();
const stream = await navigator.mediaDevices.getUserMedia({ video: true });
const [track] = stream.getVideoTracks();
const sender = pc.addTrack(track, stream);
const params = sender.getParameters();
console.log('Transaktion:', params.transactionId);
console.log('Encodings:', params.encodings);
console.log('Codecs:', params.codecs.map(c => c.mimeType));
Maximale Video-Bitrate begrenzen (Lesen-Ändern-Schreiben)
const limitBitrate = async (sender, kbps) => {
const params = sender.getParameters();
if (!params.encodings || params.encodings.length === 0) {
params.encodings = [{}];
}
params.encodings[0].maxBitrate = kbps * 1000;
await sender.setParameters(params);
console.log('Neue maxBitrate:', sender.getParameters().encodings[0].maxBitrate);
};
const videoSender = pc.getSenders().find(s => s.track?.kind === 'video');
await limitBitrate(videoSender, 500);
Simulcast-Ebene mit hoher Auflösung abschalten
const disableLayer = async (sender, rid) => {
const params = sender.getParameters();
const layer = params.encodings.find(e => e.rid === rid);
if (!layer) return console.warn(`Ebene ${rid} nicht gefunden`);
layer.active = false;
await sender.setParameters(params);
console.log(params.encodings.map(e => `${e.rid}: ${e.active}`).join(', '));
};
// Transceiver mit drei Simulcast-Ebenen
const { sender } = pc.addTransceiver(track, {
sendEncodings: [
{ rid: 'q', scaleResolutionDownBy: 4 },
{ rid: 'h', scaleResolutionDownBy: 2 },
{ rid: 'f' }
]
});
await disableLayer(sender, 'f');
// Wichtig · Fallstricke
- Immer frisch lesen:
setParameters()wirft einenInvalidModificationError, wenn dietransactionIdveraltet ist oder ein altes Objekt wiederverwendet wird. ZwischengetParameters()undsetParameters()nicht auf andere Ereignisse warten. - Nicht änderbare Felder:
codecs,headerExtensions,rtcpund die Anzahl bzw.rid-Werte derencodingsdürfen nicht verändert werden. Sonst schlägtsetParameters()fehl. - Vor der Aushandlung: Vor Abschluss von Offer/Answer sind
codecsundheaderExtensionsoft leer, undencodingskann (vor allem in älteren Firefox-Versionen) ein leeres Array sein. - Browser-Unterschiede:
degradationPreferenceundencodings[].priority/networkPrioritywerden nicht überall unterstützt. Ältere Chrome-Versionen hatten ein abweichendes Legacy-Format. Unterstützung vor der Nutzung prüfen. - Die Methode ist synchron. Die zugehörige Methode
setParameters()gibt dagegen einPromisezurück.