javascript - 如何通过 SIPJS 向其他呼叫者发送(屏幕共享流)
问题描述
我正在使用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--------------');
});
});
但仍然从上面的代码中一无所获
那么如何在通话开始后将该流或音轨传递给其他来电者呢?
太感谢了
解决方案
我从一些伟大的先生那里找到了解决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);
});
推荐阅读
- java - 无法在 selenium 中逐行写入 excel 单列中的数据
- python - 使用 Psycopg2 时,Postgres 在几百秒后在查询期间关闭连接
- django - django.core.exceptions.FieldError:不支持查找 DateTimeField 的“季度”或不允许加入该字段
- ios - 当我退出视图控制器时,如何在不按停止按钮的情况下杀死 Countdowntimer?
- c++ - C++ 强制函数参数求值顺序
- r - GAMLSS BEINF 系列中的随机效应
- azure - Azure 追加策略不追加
- java - 使用 HTTP Java 客户端执行异步请求时如何处理错误?
- javascript - 如何获取对包含 JSON 的 url 的更新?
- node.js - Docker-Compose:无法将 NodeJS 与 Mongo 和 Redis 连接 [连接被拒绝]