RTCPeerConnection: addStream() 方法

已弃用:此功能不再推荐。尽管某些浏览器可能仍然支持它,但它可能已被从相关 Web 标准中删除,可能正在被删除,或者可能只是出于兼容性目的保留。避免使用它,并尽可能更新现有代码;请参阅本页面底部的兼容性表格以指导您的决策。请注意,此功能随时可能停止工作。

非标准:此功能是非标准的,并且不在标准轨道上。不要在面向 Web 的生产站点上使用它:它不会为所有用户工作。实现之间也可能存在很大差异,并且行为将来可能会发生变化。

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

规范

未找到规范

未找到 api.RTCPeerConnection.addStream 的规范数据。
检查此页面是否有问题或将缺失的 spec_url 贡献给 mdn/browser-compat-data。还要确保规范包含在 w3c/browser-specs.

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅