RTCPeerConnection: addStream() 方法
已弃用:此特性不再推荐。虽然某些浏览器可能仍然支持它,但它可能已经从相关的网络标准中删除,可能正在删除过程中,或者可能仅为兼容性目的而保留。请避免使用它,如果可能,请更新现有代码;请参阅本页底部的兼容性表格以指导您的决策。请注意,此特性可能随时停止工作。
非标准:此特性未标准化。我们不建议在生产环境中使用非标准特性,因为它们浏览器支持有限,并且可能会更改或被移除。但是,在没有标准选项的特定情况下,它们可以是合适的替代方案。
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")));
}
规范
此特性似乎未在任何规范中定义。浏览器兼容性
加载中…