Start · Sprachen · JavaScript · Referenz · RTCRtpTransceiver.stopped

RTCRtpTransceiver.stopped

Eigenschaft

Schreibgeschützter Wahrheitswert, der angibt, ob Sender und Empfänger eines <code>RTCRtpTransceiver</code> beide dauerhaft gestoppt wurden.

seit JavaScript Veraltet – nicht mehr in der aktuellen WebRTC-Spez deprecated seit ja Kategorie: webapi

Signatur

RTCRtpTransceiver.stopped

Beschreibung

Die schreibgeschützte Eigenschaft stopped eines RTCRtpTransceiver liefert true, wenn sowohl der zugehörige RTCRtpSender als auch der RTCRtpReceiver gestoppt sind. Ein Transceiver wird zum Beispiel durch den Aufruf von transceiver.stop() gestoppt oder wenn eine Remote-Beschreibung angewendet wird, die den entsprechenden Media-Abschnitt ablehnt (Port 0 in der SDP).

Ein gestoppter Transceiver bleibt gestoppt. Er sendet und empfängt keine Medien mehr, und sein Sender und sein Empfänger lassen sich nicht wiederverwenden. Wer die Eigenschaft prüft, weiß also, ob ein Transceiver noch für neue Tracks (etwa über sender.replaceTrack()) in Frage kommt oder ob man einen neuen mit addTransceiver() anlegen muss.

Wichtig: stopped wurde aus der WebRTC-Spezifikation entfernt. Der empfohlene Ersatz ist ein Blick auf transceiver.currentDirection === "stopped" bzw. transceiver.direction === "stopped". In neuem Code sollte man die Eigenschaft nur als Rückfalllösung mit Feature-Erkennung verwenden.

Beispiele

Transceiver stoppen und Zustand prüfen

const pc = new RTCPeerConnection();
const transceiver = pc.addTransceiver('video', { direction: 'sendrecv' });

console.log('vorher:', transceiver.stopped);

transceiver.stop();

// Veraltete Eigenschaft (falls vorhanden) und moderner Ersatz
console.log('stopped:', transceiver.stopped);
console.log('direction:', transceiver.direction);
vorher: false stopped: true direction: stopped

Kompatible Hilfsfunktion mit Feature-Erkennung

const isTransceiverStopped = (t) => {
  // Bevorzugt: spezifikationskonforme Abfrage
  if (t.currentDirection === 'stopped' || t.direction === 'stopped') {
    return true;
  }
  // Rückfall für ältere Implementierungen
  return 'stopped' in t ? Boolean(t.stopped) : false;
};

const pc = new RTCPeerConnection();
const audio = pc.addTransceiver('audio');
const video = pc.addTransceiver('video');
video.stop();

console.log(isTransceiverStopped(audio));
console.log(isTransceiverStopped(video));
false true

Wiederverwendbaren Transceiver für einen neuen Track suchen

const pc = new RTCPeerConnection();

const attachVideoTrack = async (track) => {
  const reusable = pc.getTransceivers().find((t) =>
    t.receiver.track.kind === 'video' &&
    !(t.stopped || t.currentDirection === 'stopped') &&
    t.sender.track === null
  );

  if (reusable) {
    await reusable.sender.replaceTrack(track);
    reusable.direction = 'sendrecv';
    return reusable;
  }
  // Gestoppte Transceiver sind nicht mehr nutzbar – neuen anlegen
  return pc.addTransceiver(track, { direction: 'sendrecv' });
};

const stream = await navigator.mediaDevices.getUserMedia({ video: true });
const t = await attachVideoTrack(stream.getVideoTracks()[0]);
console.log('Transceiver-mid:', t.mid);
Transceiver-mid: null (bis zur Aushandlung)

// Wichtig · Fallstricke

  • Veraltet: Die Eigenschaft steht nicht mehr in der WebRTC-Spezifikation. Einige Browser unterstützen sie noch, andere nicht oder nicht mehr. Dann liefert sie undefined. Verwende stattdessen currentDirection === "stopped" bzw. direction === "stopped".
  • Ein gestoppter Transceiver lässt sich nicht wieder aktivieren. Das Setzen von direction auf einem gestoppten Transceiver wirft einen InvalidStateError.
  • Nach stop() ist direction sofort "stopped". currentDirection wechselt erst nach der nächsten erfolgreichen Offer/Answer-Aushandlung auf "stopped". Danach kann der Transceiver aus getTransceivers() verschwinden.
  • Auch eine abgelehnte Remote-Beschreibung (Media-Abschnitt mit Port 0) stoppt den Transceiver, ohne dass im eigenen Code stop() aufgerufen wurde.
  • Nur in sicheren Kontexten (HTTPS) sinnvoll nutzbar, weil Medienzugriff wie getUserMedia() eine sichere Herkunft voraussetzt.