Signatur
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);
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));
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);
// 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 stattdessencurrentDirection === "stopped"bzw.direction === "stopped". - Ein gestoppter Transceiver lässt sich nicht wieder aktivieren. Das Setzen von
directionauf einem gestoppten Transceiver wirft einenInvalidStateError. - Nach
stop()istdirectionsofort"stopped".currentDirectionwechselt erst nach der nächsten erfolgreichen Offer/Answer-Aushandlung auf"stopped". Danach kann der Transceiver ausgetTransceivers()verschwinden. - Auch eine abgelehnte Remote-Beschreibung (Media-Abschnitt mit Port
0) stoppt den Transceiver, ohne dass im eigenen Codestop()aufgerufen wurde. - Nur in sicheren Kontexten (HTTPS) sinnvoll nutzbar, weil Medienzugriff wie
getUserMedia()eine sichere Herkunft voraussetzt.