RTCPeerConnection: addStream()-Methode

Veraltet: Diese Funktion wird nicht mehr empfohlen. Obwohl einige Browser sie möglicherweise noch unterstützen, kann sie bereits aus den relevanten Webstandards entfernt worden sein, befindet sich im Prozess der Entfernung oder wird nur aus Kompatibilitätsgründen beibehalten. Vermeiden Sie die Verwendung und aktualisieren Sie gegebenenfalls bestehenden Code; siehe die Kompatibilitätstabelle am Ende dieser Seite, um Ihre Entscheidung zu treffen. Beachten Sie, dass diese Funktion jederzeit nicht mehr funktionieren kann.

Kein Standard: Diese Funktion ist nicht standardisiert und befindet sich nicht im Standardisierungsprozess. Verwenden Sie sie nicht auf Produktionsseiten, die auf das Web ausgerichtet sind: Sie wird nicht für alle Benutzer funktionieren. Außerdem kann es große Inkompatibilitäten zwischen Implementierungen geben und das Verhalten kann sich in Zukunft ändern.

Die addStream()-Methode der RTCPeerConnection-Schnittstelle fügt einen MediaStream als lokale Audio- oder Videoquelle hinzu. Anstatt diese veraltete Methode zu verwenden, sollten Sie stattdessen für jede Spur, die Sie an den entfernten Peer senden möchten, addTrack() verwenden.

Wenn der signalingState auf closed gesetzt ist, wird ein InvalidStateError ausgelöst. Ist der signalingState auf stable gesetzt, wird das Ereignis negotiationneeded an die RTCPeerConnection gesendet, um anzuzeigen, dass die ICE-Aushandlung wiederholt werden muss, um den neuen Stream zu berücksichtigen.

Syntax

js
addStream(mediaStream)

Parameter

mediaStream

Ein MediaStream-Objekt, das den Stream angibt, der zur WebRTC-Peer-Verbindung hinzugefügt werden soll.

Rückgabewert

Keiner.

Beispiel

Dieses einfache Beispiel fügt den Audio- und Videostream, der von der Kamera des Benutzers kommt, der Verbindung hinzu.

js
navigator.mediaDevices.getUserMedia({ video: true, audio: true }, (stream) => {
  const pc = new RTCPeerConnection();
  pc.addStream(stream);
});

Migration zu addTrack()

Soweit kompatibel, sollten Sie Ihren Code so aktualisieren, dass stattdessen die addTrack()-Methode verwendet wird:

js
navigator.getUserMedia({ video: true, audio: true }, (stream) => {
  const pc = new RTCPeerConnection();
  stream.getTracks().forEach((track) => {
    pc.addTrack(track, stream);
  });
});

Die neuere addTrack()-API vermeidet Verwirrung darüber, ob spätere Änderungen an der Zusammensetzung eines Streams eine Peer-Verbindung beeinflussen (was sie nicht tun).

Die Ausnahme bildet Chrome, wo addStream() die Peer-Verbindung auf spätere Stream-Änderungen empfindlich macht (obwohl solche Änderungen das negotiationneeded-Ereignis nicht auslösen). Wenn Sie sich auf das Chrome-Verhalten verlassen, beachten Sie, dass andere Browser dieses Verhalten nicht haben. Sie können webkompatiblen Code mit Feature-Erkennung schreiben:

js
// Add a track to a stream and the peer connection said stream was added to:

stream.addTrack(track);
if (pc.addTrack) {
  pc.addTrack(track, stream);
} else {
  // If you have code listening for negotiationneeded events:
  setTimeout(() => pc.dispatchEvent(new Event("negotiationneeded")));
}

// Remove a track from a stream and the peer connection said stream was added to:

stream.removeTrack(track);
if (pc.removeTrack) {
  pc.removeTrack(pc.getSenders().find((sender) => sender.track === track));
} else {
  // If you have code listening for negotiationneeded events:
  setTimeout(() => pc.dispatchEvent(new Event("negotiationneeded")));
}

Spezifikationen

No specification found

No specification data found for api.RTCPeerConnection.addStream.
Check for problems with this page or contribute a missing spec_url to mdn/browser-compat-data. Also make sure the specification is included in w3c/browser-specs.

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch