javascript - 无法理解为什么多个同行无法在我的 webrtc 应用程序中工作
问题描述
我不明白为什么当第三个对等点连接时它会为第三个对等点抛出此错误。我认为这可能是因为连接变得混乱,因为当第 3 个对等点连接时,他一次收到两个提议,我不知道我是否应该像队列或其他东西一样。虽然我不确定那是问题所在。我现在要试试,但如果有人能看到我做错了什么,请告诉我。无法读取未定义的属性“setRemoteDescription”
componentDidMount() {
setUserMedia();
this.socket.emit('createOrJoin', this.props.session);
this.socket.on('signal', (data, remoteId) => {
switch (data.type) {
case 'newJoin':
console.log('joined')
this.createPeerRtcAndStream(remoteId, (rtc) => {
this.createOffer(rtc, (offer) => this.socket.emit('signal', offer));
this.remoteClients++;
});
break;
case 'offer':
this.remoteClients++;
this.createPeerRtcAndStream(remoteId, (rtc) => {
rtc.setRemoteDescription(new RTCSessionDescription(data), () => {
this.createAnswer(rtc, (answer) => this.socket.emit('signal', answer));
});
});
break;
case 'answer':
this.rtcs[remoteId].setRemoteDescription(new RTCSessionDescription(data));
break;
case 'candidate':
let hisCandidate = new RTCIceCandidate({
sdpMLineIndex: data.label,
candidate: data.candidate
});
if (this.rtcs[remoteId] !== undefined && this.rtcs[remoteId].remoteDescription.type) {
this.rtcs[remoteId].addIceCandidate(hisCandidate);
}
break;
case 'clientLeft':
this.handleLeavingClient(remoteId);
break;
default:
this.socket.emit('signal', { type: 'failedConnection' });
}
});
}
console.log('CLIENT DESC', session);
if(session.creatingSession===false){
if(rooms[session.sessionKey]){
reciever = socket.id;
socket.join(session.sessionKey);
rooms[session.sessionKey].clients.push(socket.id);
socket.in(session.sessionKey).emit('signal',{type:'newJoin'}, socket.id);
}
} else {
if(!rooms[session.sessionKey]){
socket.join(session.sessionKey);
msgs[session.sessionKey] = [];
rooms[session.sessionKey] = {};
rooms[session.sessionKey].clients = [];
}
rooms[session.sessionKey].name = session.room;
rooms[session.sessionKey].clients.push(socket.id);
console.log('CREATED SESSION');
redClient.hset('rooms', session.sessionKey, JSON.stringify(session))
}
socket.on('signal', (data) => {
switch (data.type){
case 'offer':
console.log('initiator recieved');
sender = socket.id
io.to(reciever).emit('signal', data, socket.id);
break;
case 'answer':
console.log('answer recieved');
io.to(sender).emit('signal', data, socket.id);
break;
case 'candidate':
console.log('Recieved candidate');
sender = socket.id;
if(socket.io==reciever){
io.to(sender).emit('signal', data, socket.id);
} else {
io.to(reciever).emit('signal', data, socket.id);
}
break;
case 'failedConnection':
console.log('FAILED CONNECTION')
default :
console.log('NO CASE EXECUTED')
}
});
解决方案
推荐阅读
- ios - 分离 ExpoKit 后无法构建 ios 版本
- sql - 需要查询以公共列为基础组合 3 个表数据?
- ios - Swift - 将 base64EncodedString 传递给 ASP.NET API
- layout - Stack with Fittedbox 在布局中有奇怪的行为吗?
- java - 将批处理流式传输到 CSV java 7
- python - 使用 TensorFlow 保存检查点
- javascript - 为什么变量未定义
- environment-variables - 将文件中的变量读入 Fabric 的 env 字典
- javascript - 何时使用 React
- javascript - Ajax 调用后面的代码。达到完成阶段,但不返回成功或触发函数后面的代码