Javascript 捕获屏幕时webrtc速度问题
我正在开发一个4点webrtc视频聊天! 在这一点上一切都很好,所以我添加了一个屏幕分享未来的网站 当我按下screenshare时,连接变得如此缓慢!我想这是因为4个节点连接,但这只有在我共享屏幕时才会发生。 我尝试使用RemoveStream函数发送相机流,但流仍然滞后。 这是我按下screenshare按钮后运行的功能Javascript 捕获屏幕时webrtc速度问题,javascript,html,webrtc,p2p,Javascript,Html,Webrtc,P2p,我正在开发一个4点webrtc视频聊天! 在这一点上一切都很好,所以我添加了一个屏幕分享未来的网站 当我按下screenshare时,连接变得如此缓慢!我想这是因为4个节点连接,但这只有在我共享屏幕时才会发生。 我尝试使用RemoveStream函数发送相机流,但流仍然滞后。 这是我按下screenshare按钮后运行的功能 async function startCapture() { var audioStream = await navigator.mediaDevices.ge
async function startCapture() {
var audioStream = await navigator.mediaDevices.getUserMedia({audio:true});
var audioTrack = audioStream.getAudioTracks()[0];
let captureStream = null;
try {
captureStream = await navigator.mediaDevices.getDisplayMedia(gdmOptions);
captureStream.addTrack( audioTrack );
} catch(err) {
console.error("Error: " + err);
}
// return captureStream;
if(rtcPeerConn){
rtcPeerConn.removeStream(myStream);
rtcPeerConn.addStream(captureStream);
}
if(rtcPeerConn1){
rtcPeerConn1.removeStream(myStream);
rtcPeerConn1.addStream(captureStream);
}
if(rtcPeerConn2){
rtcPeerConn2.removeStream(myStream);
rtcPeerConn2.addStream(captureStream);
}
if(rtcPeerConn3){
rtcPeerConn3.removeStream(myStream);
rtcPeerConn3.addStream(captureStream);
}
myStream.getTracks().forEach(function(track) {
track.stop();
});
myStream = captureStream;
success(myStream);
}
我甚至试着像这样从第一条流中删除轨迹
async function startCapture() {
myStream.getTracks().forEach(function(track) {
track.stop();
});
var audioStream = await navigator.mediaDevices.getUserMedia({audio:true});
var audioTrack = audioStream.getAudioTracks()[0];
let captureStream = null;
try {
captureStream = await navigator.mediaDevices.getDisplayMedia(gdmOptions);
captureStream.addTrack( audioTrack );
} catch(err) {
console.error("Error: " + err);
}
if(rtcPeerConn){
rtcPeerConn.removeStream(myStream);
rtcPeerConn.addStream(captureStream);
}
if(rtcPeerConn1){
rtcPeerConn1.removeStream(myStream);
rtcPeerConn1.addStream(captureStream);
}
if(rtcPeerConn2){
rtcPeerConn2.removeStream(myStream);
rtcPeerConn2.addStream(captureStream);
}
if(rtcPeerConn3){
rtcPeerConn3.removeStream(myStream);
rtcPeerConn3.addStream(captureStream);
}
myStream = captureStream;
success(myStream);
}
正如您所见,我使用removeStream函数来避免发送无用的流,但仍然没有任何更改。您在
getDisplayMedia
上设置了哪些限制?也许你发送了“太多”的视频内容,从而减慢了速度
[编辑]
根据您的评论,您正在录制屏幕上的音频以及麦克风上的音频。也许从屏幕录制中删除音频曲目
您还可以使用选项来减小视频的大小:(这需要使用getUserMedia
而不是getDisplayMedia
)
也许更低的帧率?试着缩小尺寸,看看这是否也有帮助:)const-gdmOptions={video:{cursor:{always},audio:{echoconcellation:true,noiseSuppression:true,sampleRate:44100}这是来自MDN网站的谢谢,这可能很有用,制作的帧数较少,但我无法从屏幕录制中删除音频曲目,我需要它。当我开始共享屏幕时,我会删除摄像机轨迹,因此如果我不将音频连接到屏幕共享,其他同行将听不到我的声音此答案不正确且
类型错误:不支持最小限制
。在getDisplayMedia
中没有设备发现,只是缩小了范围,因此不需要min
和精确的
约束。只需指定所需的大小,例如,{width:640,height:480,frameRate:10}
。最小约束适用于getUserMedia,但不适用于GetUserDisplayMedia添加和删除流并没有为您提供所需的控制,这就是为什么API具有。已弃用,甚至不能在Firefox或Safari中使用。供参考
video:{
width: { min: 100, ideal: width, max: 1920 },
height: { min: 100, ideal: height, max: 1080 },
frameRate: {ideal: framerate}
}