嘗試使用replaceTrack
爲單個軌道,而不是替換整個流。這個例子假設你有一個對等連接pc1
和一個新的流newStream
來取代它。獲取發件人,並用新流中的適當曲目替換曲目。工作樣品here。
Promise.all(pc1.getSenders().map(sender =>
sender.replaceTrack((sender.track.kind == "audio")?
newStream.getAudioTracks()[0] :
newStream.getVideoTracks()[0])))
.then(() => log("Flip!"))
.catch(failed);
另外要注意這一點,從您的第一個鏈接:
function screenShare() {
let screenConstraints = {video: {mediaSource: "screen"}};
navigator.mediaDevices.getUserMedia(screenConstraints)
.then(stream) {
stream.getTracks().forEach(track) {
screenStream = stream;
screenSenders.push(pc1.addTrack(track, stream));
});
});
}
注意,這個例子調用pc1.addTrack
不pc1.addStream
,並在反向相同,去除 - pc1.removeTrack
:
function stopScreenShare() {
screenStream.stop();
screenSenders.forEach(sender) {
pc1.removeTrack(sender);
});
}