Signatur
Beschreibung
getReceivers() liefert eine Momentaufnahme aller RTP-Empfänger einer RTCPeerConnection. Jeder RTCRtpReceiver gehört zu einem RTCRtpTransceiver und stellt über receiver.track die eingehende MediaStreamTrack bereit, dazu Statistiken (getStats()), Quellinformationen (getSynchronizationSources(), getContributingSources()) und die aktuell ausgehandelten Parameter (getParameters()).
Die Methode eignet sich, um nach der Aushandlung (Offer/Answer) alle eingehenden Spuren zu durchsuchen, z. B. um Empfangsstatistiken für eine Qualitätsanzeige zu sammeln, Audiopegel entfernter Teilnehmer zu ermitteln oder Jitter-Buffer-Einstellungen (jitterBufferTarget) anzupassen.
Die Reihenfolge des Arrays entspricht der Reihenfolge der Transceiver, also im Wesentlichen pc.getTransceivers().map(t => t.receiver). Gestoppte Transceiver werden nicht mehr aufgeführt. Da ein Receiver bereits beim Anlegen des Transceivers existiert, kann seine Spur vorhanden, aber noch stumm (muted) sein, bis tatsächlich Medien eintreffen.
Rückgabewert
RTCRtpReceiver pro nicht gestopptem Transceiver. Leer, wenn noch keine Transceiver existieren.Beispiele
Alle eingehenden Spuren auflisten
const pc = new RTCPeerConnection();
pc.addTransceiver('audio', { direction: 'recvonly' });
pc.addTransceiver('video', { direction: 'recvonly' });
for (const receiver of pc.getReceivers()) {
console.log(receiver.track.kind, receiver.track.readyState);
}
Empfangsstatistik für eine Qualitätsanzeige
const logInboundStats = async (pc) => {
for (const receiver of pc.getReceivers()) {
const report = await receiver.getStats();
report.forEach((stat) => {
if (stat.type === 'inbound-rtp') {
console.log(`${stat.kind}: ${stat.packetsLost ?? 0} Pakete verloren, Jitter ${stat.jitter}s`);
}
});
}
};
// Alle 2 Sekunden auswerten
setInterval(() => logInboundStats(pc), 2000);
Sprecher-Erkennung über Audiopegel
const detectActiveSpeaker = (pc) => {
const audioReceivers = pc.getReceivers()
.filter((r) => r.track?.kind === 'audio');
for (const receiver of audioReceivers) {
const [source] = receiver.getSynchronizationSources();
if (source && source.audioLevel > 0.1) {
console.log(`Aktiv: SSRC ${source.source}, Pegel ${source.audioLevel.toFixed(2)}`);
}
}
};
setInterval(() => detectActiveSpeaker(pc), 500);
// Wichtig · Fallstricke
- Das Array ist eine Momentaufnahme: Später hinzugefügte Transceiver erscheinen erst beim nächsten Aufruf. Auf neue Spuren reagiert man besser über das
track-Event. - Ein Receiver existiert auch bei
direction: 'sendonly'oder'inactive'; seine Spur empfängt dann aber keine Medien. Prüfe bei Bedarftransceiver.currentDirection. - Die Spur (
receiver.track) ist nienull, kann aber dauerhaftmutedsein, solange keine RTP-Pakete eintreffen. - Nach
pc.close()liefert die Methode je nach Browser ein leeres Array oder nur noch gestoppte Spuren – danach keine Statistiken mehr abfragen. - Kompatibilität: in Chrome, Firefox, Safari und Edge verfügbar;
getSynchronizationSources()undjitterBufferTargetwerden erst von neueren Versionen unterstützt. Ältere Chrome-Versionen im „Plan B“-SDP-Modus verhielten sich abweichend.