Я создаю видео-чат один-к-одному с WebRTC и Socket.io (с Node.JS), и эта ошибка остановила меня
когда я захожу в чат, я вижу себя (отображается локальное видео), но не могу получить удаленное видео
так как на это не так много ресурсов, и я новичок, я решил приехать сюда
потому что я не могу найти ошибку
так вот код:
WebRTC:
//i have declared pc and pc2 before like let pc; let pc2;
function onSuccess() {};
function onError(error) {
console.log(error.message);
};
function startWebRTC(isOfferer) {
pc = new RTCPeerConnection(configuration);
pc2 = new RTCPeerConnection(configuration)
pc.onicecandidate = event => {
if (event.candidate) {
socket.emit('candidate', {
candidate: event.candidate
});
}
};
if (isOfferer) {
pc.onnegotiationneeded = () => {
pc.createOffer().then(localDescCreated).catch(onError);
}
}
pc.ontrack = event => {
const stream = event.streams[0];
if (!remoteVideo.srcObject || remoteVideo.srcObject.id !== stream.id) {
remoteVideo.srcObject = stream;
}
};
navigator.mediaDevices.getUserMedia({
audio: true,
video: true,
}).then(stream => {
localVideo.srcObject = stream;
stream.getTracks().forEach(track => pc.addTrack(track, stream));
}, onError);
socket.on('data', (data) => {
if (socket.id === data.id) {
return;
}
if (data.sdp) {
pc2.setRemoteDescription(new RTCSessionDescription(data.sdp), () => {
if (pc2.remoteDescription.type === 'offer') {
pc2.createAnswer().then(localDescCreated).catch(err => {
console.log(err.message)
});
}
}, onError);
} else if (data.candidate) {
pc2.addIceCandidate(
new RTCIceCandidate(data.candidate), onSuccess, onError
);
}
});
}
function localDescCreated(desc) {
pc.setLocalDescription(
desc,
() => socket.emit('sdp', {
sdp: pc.localDescription
}),
onError
);
}
Socket.io:
//room number is incremented when number of users reach to 2
socket.on('candidate', (data)=>{
socket.broadcast.to(socket.current_vidroom).emit('data', {candidate:
data.candidate, id: socket.id})
})
socket.on('sdp', (data)=>{
socket.broadcast.to(socket.current_vidroom).emit('data', {sdp:
data.sdp, id: socket.id})
})