Как отправить (поток обмена экранами) через SIPJS другому абоненту - PullRequest
0 голосов
/ 03 октября 2019

Я использую SIPJS , чтобы совершать звонки между двумя абонентами с помощью веб-браузера.

Теперь я хочу добавить ( Обмен экранами ), пока что ямне удалось открыть окно совместного использования экрана Chrome, и я получил поток и воспроизвел его в элементе видео.

Но мне действительно нужно отправить этот поток другому абоненту, чтобы он мог видеть мой общий доступ к экрану.

То, что я пробовал до сих пор:

  • После того, как я получаю (поток обмена экранами), я передаю его session.sessionDescriptionHandler.peerConnection, изатем перехватить поток (или трек), используя эти события onTrackAdded , onaddTrack , onaddStream , onstreamНо ни одно из событий не получает ничего.
  • Также пытался отправить поток с video constraint до начала вызова
video: {
mandatory: {
chromeMediaSource: 'desktop',
// chromeMediaSourceId: event.data.sourceId,
maxWidth: window.screen.width > 1920 ? window.screen.width : 1920,
maxHeight: window.screen.height > 1080 ? window.screen.height : 1080
},
optional: []
}
  • Даже попытка отправить поток с video constraint
navigator.mediaDevices.getDisplayMedia(constraints)
    .then(function(stream) {
      //We've got media stream
      console.log("----------then triggered-------------");
      var options = {
            sessionDescriptionHandlerOptions: {
              constraints: {
                  audio: true,
                  video: stream
              }
            }
          } 
        pub_session = userAgent.invite(reciver_name,options);
    })
    .catch(function(error) {
      console.log("----------catch-------------");
      console.log(error);
    });

также не работала.

Здесьмой код

Сначала получите поток совместного использования экрана и отправьте его другому пользователю

// Get screen sharing and send it.
 navigator.mediaDevices.getDisplayMedia(constraints)
    .then(function(stream) {
      //We've got media stream
      console.log("----------then triggered-------------");
      var pc = session.sessionDescriptionHandler.peerConnection;
      stream.getTracks().forEach(function(track) {
        pc.addTrack(track, stream);
      });      
    })
    .catch(function(error) {
      console.log("----------catch-------------");
      console.log(error);
    });

Затем перехватите этот поток на другой стороне

// Reciving stream or track
userAgent.on('invite', function (session) {
    session.on('trackAdded', function() {
        console.log('-------------trackAdded triggered--------------');
      });

      session.on('addTrack', function (track) {
        console.log('-------------addTrack triggered--------------');
      });

      session.on('addStream', function (stream) {
        console.log('-------------addStream triggered--------------');
      });

      session.on('stream', function (stream) {
        console.log('-------------stream triggered--------------');
      });
});

Но все женичего не получить из этого кода выше

Так как я могу передать этот поток или дорожку другому абоненту после начала вызова?

спасиботак много

1 Ответ

0 голосов
/ 14 октября 2019

Я нашел решение от некоторых великих джентльменов в SIPJS группах

Надеюсь, что ответ поможет кому-то, поскольку он помог мне

var option = {video: {mediaSource: 'screen'}, audio: true};
navigator.mediaDevices.getDisplayMedia(option)
.then(function(streams){
  var pc = session.sessionDescriptionHandler.peerConnection;
  var videoTrack = streams.getVideoTracks()[0];
  var sender = pc.getSenders().find(function(s) {   
    return s.track.kind == videoTrack.kind;
  }); 
  console.log('found sender:', sender);
  sender.replaceTrack(videoTrack);
}, function(error){
  console.log("error ", error);
});
...