RTCPeerConnection: addStream() 方法

已棄用:此特性不再推薦。雖然某些瀏覽器可能仍然支援它,但它可能已經從相關的網路標準中刪除,可能正在刪除過程中,或者可能僅為相容性目的而保留。請避免使用它,如果可能,請更新現有程式碼;請參閱本頁底部的相容性表格以指導您的決策。請注意,此特性可能隨時停止工作。

非標準:此特性未標準化。我們不建議在生產環境中使用非標準特性,因為它們瀏覽器支援有限,並且可能會更改或被移除。但是,在沒有標準選項的特定情況下,它們可以是合適的替代方案。

RTCPeerConnection 介面的 addStream() 方法將一個 MediaStream 新增為音訊或影片的本地源。請注意,此方法已廢棄,您應該改為對每個要傳送給遠端對等端的軌道使用 addTrack() 方法。

如果 signalingState 設定為 closed,則會引發 InvalidStateError。如果 signalingState 設定為 stable,則會在 RTCPeerConnection 上傳送 negotiationneeded 事件,以指示必須重複 ICE 協商以考慮新流。

語法

js
addStream(mediaStream)

引數

mediaStream

一個 MediaStream 物件,表示要新增到 WebRTC 對等連線的流。

返回值

無。

示例

這個簡單的示例會將來自使用者攝像頭的音訊和影片流新增到連線中。

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

遷移到 addTrack()

在相容的情況下,您應該更新您的程式碼,轉而使用 addTrack() 方法。

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

較新的 addTrack() API 避免了關於流的軌道構成是否會影響對等連線(實際上不會)的困惑。

唯一的例外是 Chrome,在 Chrome 中,addStream() *確實* 會使對等連線對後續的流更改變得敏感(儘管此類更改不會觸發 negotiationneeded 事件)。如果您依賴於 Chrome 的行為,請注意其他瀏覽器不具備此行為。您可以使用特性檢測來編寫相容 Web 的程式碼。

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")));
}

規範

此特性似乎未在任何規範中定義。

瀏覽器相容性

另見