#reactjs #socket.io #webrtc
Вопрос:
вы, ребята, делаете замечательные вещи, помогая людям, я ценю это, спасибо за все.
Итак, давайте зададим вопрос. Я изучаю WebRTC, сокет.io и английский :D(вот почему я не понимаю документы :/ ) с помощью ReactJS и ExpressJS. Я пытался создать базовый голосовой чат, но я не могу работать с RTCPeerConnection.onicecandidate. функции и консоль.журналы не работают в onicecandidate , это мой код реакции;
componentDidMount() {
this.socket = io.connect(this.serverIP);
this.pc = new RTCPeerConnection(this.pc_config);
console.log("We are trying to connect ", this.socket);
this.getmyAudio();
this.socket.on("online-peer", (socketID) => {
console.log(socketID "- Id user connected");
this.pc.createOffer(this.sdpConstraints).then((sdp) => {
this.pc.setLocalDescription(sdp);
this.sendToPeer("offer", sdp, {
socketID: socketID,
remote: this.socket.id,
});
});
});
this.socket.on("offer", (data) => {
console.log("I got an offer omg " data.socketID " " this.socket.id);
this.pc
.setRemoteDescription(new RTCSessionDescription(data.sdp))
.then(() => {
this.pc.createAnswer(this.sdpConstraints).then((sdp) => {
this.pc.setLocalDescription(sdp);
this.sendToPeer("answer", sdp, {
socketID: data.socketID,
remote: this.socket.id,
});
});
});
});
this.socket.on("answer", (data) => {
console.log("answer-client");
console.log(data.sdp)
this.pc.setRemoteDescription(new RTCSessionDescription(data.sdp)).then(()=>{
this.pc.onicecandidate = (e) => {
console.log(" we are in candidate")
this.sendToPeer("candidate", e.candidate, data.socketID);
}
})
});
this.socket.on("candidate", (data) => {
this.pc.addIceCandidate(data);
console.log("addIceCandidate");
});
}
и это данные ответа =>
type: 'answer',
sdp: 'v=0rn'
'o=- 198o215oooo54570o69 3 IN IP4 127.o.o.orn'
's=-rn'
't=0 0rn'
'a=extmap-allow-mixedrn'
'a=msid-semantic: WMSrn'
}
и это сокет.код ввода-вывода
const app = express();
var io = require("socket.io")(4001);
const port = 8080;
const server = app.listen(port, () => {
console.log(`Sunucu ${port}. port'ta çalışıyor...`);
});
app.use(express.static(__dirname "/build"));
app.get("/", (req, res, next) => {
res.sendFile(__dirname "/build/index.html");
});
io.listen(server);
io.on("connection", (socket) => {
console.log("Someone connected " socket.id);
socket.on("disconnect", () => {
console.log(`${socket.id}- ID user disconnected`);
});
});
const peers = io.of("/room");
let connectedPeers = new Map();
peers.on("connection", (socket) => {
connectedPeers.set(socket.id, socket);
console.log("Someone connected ------" socket.id);
socket.on("onlineUsers", (data) => {
for (const socketID of connectedPeers.entries()) {
if (socketID[0] !== data.socketID.socketID) {
socket.emit("online-peer", socketID[0]);
}
}
});
socket.on("disconnect", () => {
console.log("disconnected -" socket.id);
connectedPeers.delete(socket.id);
});
socket.on("offer", (data) => {
for (const [socketID, socket] of connectedPeers.entries()) {
if (socketID === data.socketID.socketID) {
socket.emit("offer", { sdp: data.sdp, socketID: data.socketID.remote });
}
}
});
socket.on("answer", (data) => {
console.log("answer-server");
for (const [socketID, socket] of connectedPeers.entries()) {
if (socketID === data.socketID.socketID) {
socket.emit("answer", {sdp:data.sdp, socketID:data.socketID.remote});
}
}
});
socket.on("candidate", (data) => {
for (const [socketID,socket] of connectedPeers.entries()) {
if (socketID === data.socketID) {
socket.emit("candidate", data);
}
}
});
});