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

RTCRtpReceiver.getParameters()

Methode

Gibt ein <code>RTCRtpReceiveParameters</code>-Objekt zurück, das beschreibt, mit welchen Codecs, Header-Erweiterungen und RTCP-Einstellungen der eingehende <code>track</code> dekodiert wird.

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

Signatur

RTCRtpReceiver.prototype.getParameters()

Beschreibung

Die Methode getParameters() des RTCRtpReceiver-Interface liefert eine Momentaufnahme der aktuellen Empfangskonfiguration eines Media-Tracks in einer RTCPeerConnection. Das Ergebnis zeigt, welche Codecs ausgehandelt wurden (z. B. Opus, VP8, H.264), welche RTP-Header-Erweiterungen aktiv sind und wie RTCP konfiguriert ist.

Sinnvoll ist die Methode vor allem für Diagnose und Debugging: Man prüft damit nach der SDP-Aushandlung, welcher Codec tatsächlich verwendet wird, ob Stereo-Opus oder bestimmte fmtp-Parameter aktiv sind, oder ob Erweiterungen wie abs-send-time bzw. transport-wide-cc genutzt werden.

Anders als bei RTCRtpSender gibt es zum Receiver kein passendes setParameters(). Die Werte sind also nur lesbar. Ändern lässt sich die Empfangskonfiguration nur über eine neue Aushandlung, etwa mit RTCRtpTransceiver.setCodecPreferences() und einem neuen Offer/Answer-Durchlauf.

Rückgabewert

Typ
RTCRtpReceiveParameters
Beschreibung

Ein neues Objekt mit diesen Eigenschaften:

  • codecs: Array von RTCRtpCodecParameters, jeweils mit payloadType, mimeType, clockRate, optional channels und sdpFmtpLine.
  • headerExtensions: Array mit Objekten aus uri, id und encrypted.
  • rtcp: Objekt mit cname und reducedSize.

Bei jedem Aufruf entsteht ein neues Objekt. Wenn Sie es ändern, hat das keine Auswirkung auf die Verbindung.

Beispiele

Ausgehandelte Codecs im ontrack-Handler anzeigen

const pc = new RTCPeerConnection();

pc.addEventListener('track', (event) => {
  const { receiver } = event;
  const params = receiver.getParameters();

  // Die Liste enthält die Codecs, die für diesen Receiver ausgehandelt wurden
  for (const codec of params.codecs) {
    console.log(`${event.track.kind}: ${codec.mimeType} (PT ${codec.payloadType}, ${codec.clockRate} Hz)`);
  }
});
audio: audio/opus (PT 111, 48000 Hz) video: video/VP8 (PT 96, 90000 Hz)

Prüfen, ob Opus in Stereo empfangen wird

const isOpusStereo = (receiver) => {
  const { codecs } = receiver.getParameters();
  const opus = codecs.find((c) => c.mimeType.toLowerCase() === 'audio/opus');
  if (!opus) return false;
  // stereo=1 steht in der fmtp-Zeile
  return /(^|;)\s*stereo=1/.test(opus.sdpFmtpLine ?? '');
};

// Nach Abschluss der Aushandlung
const audioReceiver = pc.getReceivers().find((r) => r.track.kind === 'audio');
if (audioReceiver) {
  console.log('Stereo aktiv:', isOpusStereo(audioReceiver));
}
Stereo aktiv: false

Header-Erweiterungen und RTCP für alle Receiver protokollieren

const dumpReceiveParameters = async (pc) => {
  for (const receiver of pc.getReceivers()) {
    const { headerExtensions, rtcp } = receiver.getParameters();
    console.group(`Receiver (${receiver.track.kind})`);
    console.table(headerExtensions.map(({ id, uri }) => ({ id, uri })));
    console.log('RTCP reduced size:', rtcp?.reducedSize);
    console.groupEnd();
  }
};

// Beispielsweise nach setRemoteDescription aufrufen
await pc.setRemoteDescription(remoteAnswer);
await dumpReceiveParameters(pc);
Receiver (video) ┌─────┬──────────────────────────────────────────────────────────────┐ │ id │ uri │ │ 3 │ http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time │ └─────┴──────────────────────────────────────────────────────────────┘ RTCP reduced size: true

// Wichtig · Fallstricke

  • Zeitpunkt: Vor Abschluss der SDP-Aushandlung (setRemoteDescription bzw. setLocalDescription mit der Antwort) können codecs und headerExtensions leer oder unvollständig sein. Rufen Sie die Methode erst nach der Aushandlung auf.
  • Nur lesbar: RTCRtpReceiver hat kein setParameters(). Wenn Sie das zurückgegebene Objekt ändern, passiert nichts. Codec-Vorgaben setzen Sie über RTCRtpTransceiver.setCodecPreferences().
  • Welcher Codec gerade aktiv ist: Enthält codecs mehrere Einträge, verrät getParameters() nicht, welcher Codec gerade benutzt wird. Dafür werten Sie getStats() aus: Der inbound-rtp-Eintrag enthält eine codecId.
  • Veraltete Felder: Ältere Implementierungen lieferten zusätzlich encodings oder transactionId. Laut aktueller Spezifikation gibt es diese Felder nur für den Sender. Bauen Sie keinen Code, der sich beim Receiver darauf verlässt.
  • Kompatibilität: Alle aktuellen Browser unterstützen die Methode. Wie vollständig sdpFmtpLine und rtcp befüllt sind, kann sich zwischen Chrome, Firefox und Safari unterscheiden.