Node.js WebRTC-SDP与以前为此类型生成的SDP不匹配
我正在用WebRTC和Socket.io(带Node.JS)构建一对一视频聊天室,这个错误阻止了我 当我进入聊天室时,我可以看到我自己(显示本地视频),但我无法获取远程视频 因为这方面的资源不多,而且我是初学者,所以我决定来这里 因为我找不到任何错误 下面是代码: WebRTC:Node.js WebRTC-SDP与以前为此类型生成的SDP不匹配,node.js,sockets,socket.io,webrtc,Node.js,Sockets,Socket.io,Webrtc,我正在用WebRTC和Socket.io(带Node.JS)构建一对一视频聊天室,这个错误阻止了我 当我进入聊天室时,我可以看到我自己(显示本地视频),但我无法获取远程视频 因为这方面的资源不多,而且我是初学者,所以我决定来这里 因为我找不到任何错误 下面是代码: WebRTC: //i have declared pc and pc2 before like let pc; let pc2; function onSuccess() {}; function onError(error) {
//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})
})
你的代码使用OnGotiationRequired,这是已知的Chrome中存在bug的代码。我正在使用Chrome74。你是在告诉我使用createOffer而不需要进行协商?像
if(isOfferer){pc.createOffer().then(localDescCreated).catch(onError);}
只需删除onnegotiationneeded,就可以了?你的代码乱七八糟了。您正在每侧创建两个rtpeerconnection
s。卸下第二个和s/pc2
/pc
/你就有东西了。