Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 捕获屏幕时webrtc速度问题_Javascript_Html_Webrtc_P2p - Fatal编程技术网

Javascript 捕获屏幕时webrtc速度问题

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

我正在开发一个4点webrtc视频聊天! 在这一点上一切都很好,所以我添加了一个屏幕分享未来的网站

当我按下screenshare时,连接变得如此缓慢!我想这是因为4个节点连接,但这只有在我共享屏幕时才会发生。 我尝试使用RemoveStream函数发送相机流,但流仍然滞后。 这是我按下screenshare按钮后运行的功能



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}
        }