webrt c проблемы со скоростью при захвате экрана - PullRequest
0 голосов
/ 25 мая 2020

я разрабатываю видео-чат webrt c для 4 участников! на данный момент все в порядке, поэтому я добавляю на сайт будущее совместного использования экрана!

когда я нажимаю кнопку «Показать экран», соединение становится очень медленным! Я думал, что это из-за соединения 4-х сверстников, но это происходит только тогда, когда я делюсь своим экраном. Я пытался использовать функцию RemoveStream, которая отправляет поток с камеры, но потоки все еще отстают. это функция, которая запускается после того, как я нажму кнопку демонстрации экрана



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, чтобы избежать отправка бесполезных потоков, но все равно ничего не изменилось.

1 Ответ

1 голос
/ 25 мая 2020

Какие ограничения вы накладываете на getDisplayMedia? Возможно, вы отправляете "слишком много" видеоконтента и, таким образом, все замедляете.

[редактировать]

Согласно вашему комментарию, вы записываете звук с экрана, а также звук с экрана ми c. Возможно, удалить звуковую дорожку из записи экрана?

Вы также можете использовать параметры для уменьшения размера видео: (для этого требуется использовать getUserMedia вместо getDisplayMedia)

video:{
            width: { min: 100, ideal: width, max: 1920 },
            height: { min: 100, ideal: height, max: 1080 },
            frameRate: {ideal: framerate}
        }

Возможно более низкая частота кадров? Попробуйте уменьшить размер и посмотрите, поможет ли это тоже :)

...