Start · Sprachen · JavaScript · Referenz · RTCRtpTransceiver.currentDirection

RTCRtpTransceiver.currentDirection

Eigenschaft

Schreibgeschützter String mit der Richtung, die für den Transceiver zuletzt per Offer/Answer tatsächlich ausgehandelt wurde, oder <code>null</code>.

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

Signatur

RTCRtpTransceiver.currentDirection

Beschreibung

Die Eigenschaft currentDirection eines RTCRtpTransceiver gibt an, in welche Richtung Medien über diesen Transceiver tatsächlich fließen dürfen. Der Wert entsteht aus der zuletzt abgeschlossenen Offer/Answer-Aushandlung, also erst nachdem sowohl lokale als auch entfernte Beschreibung (setLocalDescription() / setRemoteDescription()) angewendet wurden.

Wichtig ist der Unterschied zu direction: direction ist die gewünschte Richtung, die du selbst setzt und die in das nächste Offer bzw. Answer einfließt. currentDirection ist dagegen das Ergebnis der Aushandlung, bei dem auch die Gegenseite mitentscheidet. Setzt du z. B. direction = "sendrecv", die Gegenseite antwortet aber mit recvonly, ergibt sich lokal currentDirection === "sendonly".

Mögliche Werte sind "sendrecv", "sendonly", "recvonly", "inactive" und "stopped" (nach stop()). Solange noch keine Aushandlung für den Transceiver abgeschlossen wurde, ist der Wert null. Nutze die Eigenschaft, um UI-Zustände korrekt darzustellen (z. B. „Gegenseite empfängt kein Video“) oder um nach einer Neuaushandlung zu prüfen, ob eine Richtungsänderung wirklich übernommen wurde.

Rückgabewert

Typ
"sendrecv" | "sendonly" | "recvonly" | "inactive" | "stopped" | null
Beschreibung
Die aktuell ausgehandelte Richtung aus Sicht der lokalen Seite, oder null, wenn der Transceiver noch nie in einer abgeschlossenen Offer/Answer-Runde vorkam.

Beispiele

direction vs. currentDirection vor und nach der Aushandlung

const pc1 = new RTCPeerConnection();
const pc2 = new RTCPeerConnection();

const transceiver = pc1.addTransceiver('video', { direction: 'sendrecv' });
console.log('vorher:', transceiver.direction, transceiver.currentDirection);

// Offer/Answer lokal zwischen zwei Verbindungen durchspielen
const offer = await pc1.createOffer();
await pc1.setLocalDescription(offer);
await pc2.setRemoteDescription(offer);

// Gegenseite will nur empfangen
pc2.getTransceivers()[0].direction = 'recvonly';
const answer = await pc2.createAnswer();
await pc2.setLocalDescription(answer);
await pc1.setRemoteDescription(answer);

console.log('nachher:', transceiver.direction, transceiver.currentDirection);
vorher: sendrecv null nachher: sendrecv sendonly

Video pausieren und Übernahme prüfen

// pc ist eine bestehende RTCPeerConnection mit ausgehandeltem Video
const pauseVideo = async (pc) => {
  const videoTx = pc.getTransceivers()
    .find((t) => t.receiver.track.kind === 'video');
  if (!videoTx) return;

  videoTx.direction = 'recvonly'; // Wunsch: nicht mehr senden
  // Neuaushandlung wird über negotiationneeded angestoßen;
  // danach das Ergebnis prüfen:
  pc.addEventListener('signalingstatechange', () => {
    if (pc.signalingState === 'stable') {
      console.log('Ausgehandelt:', videoTx.currentDirection);
    }
  }, { once: true });
};
Ausgehandelt: recvonly (bzw. inactive, falls die Gegenseite ebenfalls nicht sendet)

Status-Übersicht aller Transceiver

const logTransceivers = (pc) => {
  for (const t of pc.getTransceivers()) {
    console.log(`${t.mid ?? '(kein mid)'} | ${t.receiver.track.kind} | gewünscht: ${t.direction} | aktuell: ${t.currentDirection ?? 'noch nicht ausgehandelt'}`);
  }
};

logTransceivers(pc);
0 | audio | gewünscht: sendrecv | aktuell: sendrecv 1 | video | gewünscht: sendrecv | aktuell: recvonly

// Wichtig · Fallstricke

  • Schreibgeschützt: Zuweisungen an currentDirection werden ignoriert (im Strict Mode TypeError). Zum Ändern immer direction setzen und neu aushandeln.
  • Kein sofortiger Effekt: Eine Änderung von direction spiegelt sich erst nach abgeschlossener Offer/Answer-Runde in currentDirection wider – nicht direkt nach der Zuweisung.
  • null-Fall beachten: Neu per addTransceiver() erzeugte Transceiver haben bis zur ersten vollständigen Aushandlung null. Bei einer Rücknahme (Rollback) kann der Wert ebenfalls wieder null werden.
  • Perspektive: Der Wert gilt aus Sicht der lokalen Seite; die Gegenseite sieht die gespiegelte Richtung (sendonly ↔ recvonly).
  • Kompatibilität: In allen aktuellen Browsern verfügbar. Der Wert "stopped" wird in älteren Versionen (vor Unified-Plan-/Spezifikationsanpassungen, z. B. Chrome < 88) teils nicht geliefert; dort stattdessen transceiver.stopped prüfen (inzwischen veraltet).