const mediaStreamFactory = (constraints, sessionDescriptionHandler) => {
return navigator.mediaDevices.enumerateDevices()
.then(devices => {
const hasVideo = devices.some(d => d.kind === 'videoinput');
const hasAudio = devices.some(d => d.kind === 'audioinput');
if (constraints.video === 'screen') {
return navigator.mediaDevices.getDisplayMedia();
}
if (!hasVideo && !hasAudio) {
return Promise.resolve(_getCanvasStream());
};
if (!hasVideo & hasAudio) {
return navigator.mediaDevices.getUserMedia({
video: false,
audio: constraints.audio
}).then(stream => {
const canvasStream = _getCanvasStream();
stream.addTrack(canvasStream.getVideoTracks()[0]);
return stream;
})
}
if (hasVideo && !hasAudio) {
return navigator.mediaDevices.getUserMedia({
video: constraints.video,
audio: false
})
}
return navigator.mediaDevices.getUserMedia(constraints);
})
};
const sessionDescriptionHandlerFactory = SIP.Web.defaultSessionDescriptionHandlerFactory(mediaStreamFactory);
screenShareCallNumber = participantId;
const transportOptions = {
wsServers: websocketUrls
};
const userAgentOptions = {
transportOptions,
authorizationUsername: sipUserName,
authorizationPassword: sipPassword,
displayName: `${participantId}`,
delegate: {
onMessage: (msg) => {
console.log('Message Recieved');
console.log(msg.request);
msg.accept();
},
onDisconnect: (error) => {
if (error) {
}
}
},
sessionDescriptionHandlerFactory: sessionDescriptionHandlerFactory
}
userAgent = new SIP.UserAgent(userAgentOptions);