RTCPeerConnection replaceTrack 仅更改远程对等方的流
RTCPeerConnection replaceTrack only changing stream for the remote peer
我是 RTCPeerConnection (WEbRTC) 的新手,所以请多多包涵。
到目前为止,我可以通过在我的应用程序中切换摄像头或屏幕共享来替换 运行 上的曲目。但我注意到在 2 个浏览器选项卡中,新替换的轨道流仅在 partner/remote 对等方中捕获,而不是在发起者的选项卡中。它只是继续显示旧流,即使流已被替换。
如果发起人也能看到he/she分享的内容就好了。我试过了,但到目前为止没有运气。寻求帮助。
我的代码如下:
function screenShare(){
(async () => {
try {
await navigator.mediaDevices.getDisplayMedia(
{
cursor: true
}).then(stream => {
// localStream = stream;
let videoTrack = stream.getVideoTracks()[0];
var sender = senders.find(function(s) {
return s.track.kind == videoTrack.kind;
});
sender.replaceTrack(videoTrack);
videoTrack.onended = function(){
sender.replaceTrack(localStream.getTracks()[1]);
}
});
} catch (err) {
console.log('(async () =>: ' + err);
}
})();
}
提前致谢。
根据设计,replaceTrack 替换了 RTCPeerConnection 上的流。这不会影响本地视频对象。重置本地视频元素上的 srcObject 以更改它。
我是 RTCPeerConnection (WEbRTC) 的新手,所以请多多包涵。
到目前为止,我可以通过在我的应用程序中切换摄像头或屏幕共享来替换 运行 上的曲目。但我注意到在 2 个浏览器选项卡中,新替换的轨道流仅在 partner/remote 对等方中捕获,而不是在发起者的选项卡中。它只是继续显示旧流,即使流已被替换。
如果发起人也能看到he/she分享的内容就好了。我试过了,但到目前为止没有运气。寻求帮助。
我的代码如下:
function screenShare(){
(async () => {
try {
await navigator.mediaDevices.getDisplayMedia(
{
cursor: true
}).then(stream => {
// localStream = stream;
let videoTrack = stream.getVideoTracks()[0];
var sender = senders.find(function(s) {
return s.track.kind == videoTrack.kind;
});
sender.replaceTrack(videoTrack);
videoTrack.onended = function(){
sender.replaceTrack(localStream.getTracks()[1]);
}
});
} catch (err) {
console.log('(async () =>: ' + err);
}
})();
}
提前致谢。
根据设计,replaceTrack 替换了 RTCPeerConnection 上的流。这不会影响本地视频对象。重置本地视频元素上的 srcObject 以更改它。