Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

RTCPeerConnection: addStream()-Methode

Deprecated

Avoid using this feature in new projects. This feature may be a candidate for removal from web standards or browsers.

Nicht standardisiert: Diese Funktion ist nicht standardisiert. Wir raten davon ab, nicht-standardisierte Funktionen auf produktiven Webseiten zu verwenden, da sie nur von bestimmten Browsern unterstützt werden und sich in Zukunft ändern oder entfernt werden können. Unter Umständen kann sie jedoch eine geeignete Option sein, wenn es keine standardisierte Alternative gibt.

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 addTrack() einmal für jeden Track verwenden, den Sie an den Remote-Peer senden möchten.

Wenn der signalingState auf closed gesetzt ist, wird ein InvalidStateError ausgelöst. Wenn der signalingState auf stable gesetzt ist, wird das Ereignis negotiationneeded auf der RTCPeerConnection gesendet, um anzuzeigen, dass die ICE-Verhandlung 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-Peerverbindung hinzugefügt werden soll.

Rückgabewert

Keiner.

Beispiel

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

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

Migration zu addTrack()

Bei entsprechender Kompatibilität sollten Sie Ihren Code aktualisieren, um stattdessen die addTrack()-Methode zu verwenden:

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 der Track-Zusammensetzung eines Streams eine Peer-Verbindung beeinflussen (sie tun es nicht).

Eine Ausnahme bildet Chrome, bei dem addStream() tatsächlich die Peer-Verbindung empfindlich gegenüber späteren Stream-Änderungen macht (obwohl solche Änderungen nicht das negotiationneeded-Ereignis auslösen). Wenn Sie auf dieses Verhalten von Chrome angewiesen sind, beachten Sie, dass andere Browser es nicht haben. Sie können webb-kompatiblen Code schreiben, indem Sie stattdessen Feature-Erkennung verwenden:

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

Diese Funktion scheint in keiner Spezifikation definiert zu sein.

Browser-Kompatibilität

Siehe auch