Start · Sprachen · JavaScript · Referenz · RTCPeerConnection.getReceivers()

RTCPeerConnection.getReceivers()

Methode

Gibt ein Array aller <code>RTCRtpReceiver</code>-Objekte der Verbindung zurück, von denen jedes eingehende RTP-Medien (Audio/Video) einer Spur empfängt.

seit JavaScript Baseline: alle modernen Browser (seit 2020) Kategorie: webapi

Signatur

RTCPeerConnection.prototype.getReceivers()

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

Typ
RTCRtpReceiver[]
Beschreibung
Ein neues Array mit je einem 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);
}
audio live video live

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);
audio: 3 Pakete verloren, Jitter 0.004s video: 12 Pakete verloren, Jitter 0.011s

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);
Aktiv: SSRC 123456789, Pegel 0.34

// 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 Bedarf transceiver.currentDirection.
  • Die Spur (receiver.track) ist nie null, kann aber dauerhaft muted sein, 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() und jitterBufferTarget werden erst von neueren Versionen unterstützt. Ältere Chrome-Versionen im „Plan B“-SDP-Modus verhielten sich abweichend.