Start · Sprachen · JavaScript · Referenz · RTCRtpSender.getParameters()

RTCRtpSender.getParameters()

Methode

Gibt ein <code>RTCRtpSendParameters</code>-Objekt mit der aktuellen Codier- und Übertragungskonfiguration des Tracks eines <code>RTCRtpSender</code> zurück.

seit JavaScript Baseline: alle modernen Browser (Chrome 67+, Firef Kategorie: webapi

Signatur

RTCRtpSender.prototype.getParameters()

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

Typ
RTCRtpSendParameters
Beschreibung
Objekt mit den Eigenschaften 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));
Transaktion: 1a2b3c... Encodings: [{ active: true, ... }] Codecs: [] (vor der Aushandlung leer, danach z. B. ['video/VP8', 'video/H264', ...])

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);
Neue maxBitrate: 500000

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');
q: true, h: true, f: false

// Wichtig · Fallstricke

  • Immer frisch lesen: setParameters() wirft einen InvalidModificationError, wenn die transactionId veraltet ist oder ein altes Objekt wiederverwendet wird. Zwischen getParameters() und setParameters() nicht auf andere Ereignisse warten.
  • Nicht änderbare Felder: codecs, headerExtensions, rtcp und die Anzahl bzw. rid-Werte der encodings dürfen nicht verändert werden. Sonst schlägt setParameters() fehl.
  • Vor der Aushandlung: Vor Abschluss von Offer/Answer sind codecs und headerExtensions oft leer, und encodings kann (vor allem in älteren Firefox-Versionen) ein leeres Array sein.
  • Browser-Unterschiede: degradationPreference und encodings[].priority/networkPriority werden 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 ein Promise zurück.