Signatur
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
Ein neues Objekt mit diesen Eigenschaften:
codecs: Array vonRTCRtpCodecParameters, jeweils mitpayloadType,mimeType,clockRate, optionalchannelsundsdpFmtpLine.headerExtensions: Array mit Objekten ausuri,idundencrypted.rtcp: Objekt mitcnameundreducedSize.
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)`);
}
});
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));
}
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);
// Wichtig · Fallstricke
- Zeitpunkt: Vor Abschluss der SDP-Aushandlung (
setRemoteDescriptionbzw.setLocalDescriptionmit der Antwort) könnencodecsundheaderExtensionsleer oder unvollständig sein. Rufen Sie die Methode erst nach der Aushandlung auf. - Nur lesbar:
RTCRtpReceiverhat keinsetParameters(). Wenn Sie das zurückgegebene Objekt ändern, passiert nichts. Codec-Vorgaben setzen Sie überRTCRtpTransceiver.setCodecPreferences(). - Welcher Codec gerade aktiv ist: Enthält
codecsmehrere Einträge, verrätgetParameters()nicht, welcher Codec gerade benutzt wird. Dafür werten SiegetStats()aus: Derinbound-rtp-Eintrag enthält einecodecId. - Veraltete Felder: Ältere Implementierungen lieferten zusätzlich
encodingsodertransactionId. 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
sdpFmtpLineundrtcpbefüllt sind, kann sich zwischen Chrome, Firefox und Safari unterscheiden.