【问题标题】:How to send (Screen sharing stream) via SIPJS to the other caller如何通过 SIPJS 向其他呼叫者发送(屏幕共享流)
【发布时间】:2019-10-03 14:20:44
【问题描述】:

我正在使用 SIPJS 通过网络浏览器在 2 个呼叫者之间拨打电话。

现在我想添加(屏幕共享)功能,到目前为止,我设法打开了 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--------------');
      });
});

但仍然从上面的代码中一无所获

那么我如何在通话开始后将该 streamtrack 传递给其他调用者?

非常感谢

【问题讨论】:

  • 没有人可以帮忙吗?

标签: javascript webrtc screensharing desktop-sharing sipjs


【解决方案1】:

我从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);
});

【讨论】:

    猜你喜欢
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多