#javascript #webrtc #jssip
#javascript #webrtc #jssip
Вопрос:
Я пытался создать простой интерфейс для видеозвонков с помощью JsSIP
, пока мне удалось инициализировать только видеовызов, и приемник получает мои аудио- и видеопотоки, но когда я пытаюсь добавить поток (локальный или удаленный) к <video>
элементу на моей странице, я получаю ошибку "Bad Media Description"
.
Мой код выглядит примерно так:
const address = "my.address.com";
const pass = "pass";
const callee = "id2";
const user = "id1";
const sockets = [];
const localStream = new MediaStream();
const config = {
sockets: sockets,
uri: `sip:${user}@${address}`,
password: pass
};
const agent = new JsSIP.UA(config);
const servers = {
iceServers: [
{urls:"stun:stun.l.google.com:19302"}
]
};
const options = {
pcConfig: servers,
mediaConstraints: {
audio: true,
video: true
}
};
document.getElementById("localVideo").srcObject = localStream;
document.getElementById("buttonCall").addEventListener("click", call);
sockets.push(
new JsSIP
.WebSocketInterface(`wss://${address}:443/ws`)
);
agent.start();
agent.on("newRTCSession", function(data){
let dataSession = data.session;
dataSession.on("confirmed",function(e){
let localTracks = dataSession.connection.getSenders();
localStream.addTrack(localTracks[0].track);
localStream.addTrack(localTracks[1].track);
console.log(e);
document.getElementById("localVideo").play();
});
});
function call() {
agent
.call(
`sip:${callee}@${address}`,
options
);
}
Я был бы признателен, если бы кто-нибудь мог указать мне правильный способ сделать это возможным.
Ответ №1:
Я решил это, моя проблема заключалась в том, что я использовал Vue, поэтому, имея function
s внутри моей mounted()
функции, ссылка на this
перезаписывалась, решением было изменить эти function
s с помощью функций со стрелками () => {}
следующим образом:
agent.on("newRTCSession", (data) => {
let dataSession = data.session;
dataSession.on("confirmed", () => {
let localTracks = dataSession.connection.getSenders();
localStream.addTrack(localTracks[0].track);
localStream.addTrack(localTracks[1].track);
console.log(e);
this.$refs.localVideo.play();
});
});