I've been working with a project that needs to make SIP videocalls with Javascript, using JsSIP, and i've run into a problem.
I can make audio calls with no problem, but when I try to do video calls the problem occurs.
When I start the video calls, the receiver audio and video come all right with no problems, but the caller only send's the audio, and not the video
Here's my code:
function ramalSip() {
var localCon = document.getElementById('localFeed');
var remoteCon = document.getElementById('remoteFeed');
var ramalSip;
var sessionSip;
window.audioRemoteCon = document.createElement('audio');
function createSipConn() {
const conexWebSocket = new JsSIP.WebSocketInterface('wss://192.168.140.71:8089/ws/');
const configSip = {
'uri': 'sip:223@192.168.140.71',
'password': 'fadami@12',
'authorization_user': '223',
sockets: [conexWebSocket]
};
connSip = new JsSIP.UA(configSip);
return connSip;
}
function addMedias() {
sessionSip.connection.addEventListener('addstream', function (eventoDeMidia) {
console.log('addstreams', eventoDeMidia);
window.audioRemoteCon.srcObject = eventoDeMidia.stream;
window.audioRemoteCon.play();
const conn = sessionSip.connection;
console.log('Adicao e verificacao de midias',
conn.getLocalStreams.length, conn.getRemoteStreams.length);
localCon.srcObject = conn.getLocalStreams()[0];
remoteCon.srcObject = conn.getRemoteStreams()[0];
});
};
ramalSip = createSipConn();
ramalSip.on('connecting', function (ev) {
console.log('Conectando no WebSocket', ev);
});
ramalSip.on('connected', function (ev) {
console.log('conn com WebSocket efetuada', ev);
});
ramalSip.on('disconnected', function (ev) {
console.log('Desconectado do WebSocket', ev);
});
ramalSip.on('unregistered', function (ev) {
console.log('Dispositivo está sem registro', ev);
});
ramalSip.on('registered', function (ev) {
console.log('Dispositivo registrado', ev);
});
ramalSip.on('registrationFailed', function (ev) {
alert('Falha de registro no servidor SIP ' + ev.cause);
});
ramalSip.on('newMessage', function (ev) {
console.log("Nova mensagem")
})
ramalSip.on('newRTCSession', function (ev) {
console.log('Nova sessão sendo estabelecida', ev);
var newSession = ev.session;
if (sessionSip) {
sessionSip.terminate();
}
sessionSip = newSession;
if (ev.originator === 'local') {
console.trace(ev.request + ' Efetuando ligação');
} else {
console.trace(ev.request + ' recebendo ligação');
}
var endSession = function () {
sessionSip = null;
};
sessionSip.on('peerconnection', (e) => {
console.log('Teste de conn', e);
});
sessionSip.on('connecting', (e) => {
console.log('Efetuando conn', e);
});
sessionSip.on('process', (e) => {
console.log('processando', e);
});
sessionSip.on('ended', (e) => {
console.log('fim da chamada');
endSession();
});
sessionSip.on('failed', (e) => {
console.log('falha na sessão');
endSession();
});
sessionSip.on('accepted', (e) => {
console.log('Ligação aceita por', e.originator);
});
sessionSip.on('confirmed', function (e) {
console.log('Chamada confirmada', e.originator);
const localMedias = sessionSip.connection.getLocalStreams();
console.log('Confirmado com uma quantidade de mídias locais:', localMedias.length);
const remoteMedias = sessionSip.connection.getRemoteStreams();
console.log('Confirmado com uma quantidade de mídias remotas:', remoteMedias.length);
var localMedia = localMedias[0];
var dtmfSender = sessionSip.connection.createDTMFSender(localMedia.getAudioTracks()[0]);
sessionSip.sendDTMF = function (tone) {
dtmfSender.insertDTMF(tone);
};
});
});
ramalSip.start();
const btnCall = document.getElementById('connectCall');
btnCall.addEventListener('click', function () {
const dest = document.getElementById('toField').value;
const callOptions = {
mediaConstraints: {
audio: true,
video: true
},
rtcpMuxPolicy: 'require',
rtcOfferConstraints: {
'offerToReceiveAudio': true,
'offerToReceiveVideo': true
}
};
ramalSip.call(dest, callOptions);
addMedias();
});
}
$(document).ready(() => {
sip = ramalSip();
})
Furthermore thanks for the help