RTCPeerConnection: addStream() 方法
已弃用:此功能不再推荐。尽管某些浏览器可能仍然支持它,但它可能已被从相关 Web 标准中删除,可能正在被删除,或者可能只是出于兼容性目的保留。避免使用它,并尽可能更新现有代码;请参阅本页面底部的兼容性表格以指导您的决策。请注意,此功能随时可能停止工作。
非标准:此功能是非标准的,并且不在标准轨道上。不要在面向 Web 的生产站点上使用它:它不会为所有用户工作。实现之间也可能存在很大差异,并且行为将来可能会发生变化。
RTCPeerConnection
接口的addStream()
方法将 MediaStream
添加为音频或视频的本地源。您应该改为使用 addTrack()
为您希望发送到远程对等方的每个轨道执行一次,而不是使用此过时的函数。
如果signalingState
设置为 closed
,则会引发 InvalidStateError
。如果signalingState
设置为 stable
,则会向RTCPeerConnection
发送 negotiationneeded
事件,以指示必须重复ICE 协商才能考虑新流。
语法
addStream(mediaStream)
参数
mediaStream
-
一个
MediaStream
对象,指示要添加到 WebRTC 对等连接的流。
返回值
无。
示例
这个简单的示例将来自用户摄像头的音频和视频流添加到连接中。
navigator.mediaDevices.getUserMedia({ video: true, audio: true }, (stream) => {
const pc = new RTCPeerConnection();
pc.addStream(stream);
});
迁移到 addTrack()
允许兼容性后,您应该更新代码以改为使用 addTrack()
方法
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 的代码,而不是使用功能检测
// 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 表格仅在浏览器中加载