wip webrtc

This commit is contained in:
Martti Malmi
2023-12-21 11:56:49 +02:00
parent 0c2ed147b0
commit 1309937869
11 changed files with 569 additions and 7 deletions

View File

@ -0,0 +1,8 @@
# webrtc-server
```
yarn
yarn start
```
Websocket (socket.io) based signaling server for WebRTC.

View File

@ -0,0 +1,56 @@
const PORT = process.env.PORT || 3000;
const io = require('socket.io')(PORT, {
cors: {
origin: "*",
methods: ["GET", "POST"]
}
});
const peerSocketMap = new Map();
const socketPeerMap = new Map();
io.on('connection', socket => {
console.log(`New client connected, socket ID: ${socket.id}`);
const emitToTarget = (eventType, data, recipient) => {
const targetSocketId = peerSocketMap.get(recipient);
const sender = socketPeerMap.get(socket.id);
if (sender && targetSocketId) {
io.to(targetSocketId).emit(eventType, {...data, sender});
}
};
socket.on('offer', data => emitToTarget('offer', data, data.recipient));
socket.on('answer', data => emitToTarget('answer', data, data.recipient));
socket.on('candidate', data => emitToTarget('candidate', data, data.recipient));
socket.on('hello', peerId => {
console.log(`Received hello from ${peerId}`);
peerSocketMap.set(peerId, socket.id);
socketPeerMap.set(socket.id, peerId);
socket.broadcast.emit('hello', peerId);
});
socket.on('disconnect', () => {
peerSocketMap.delete(socketPeerMap.get(socket.id));
socketPeerMap.delete(socket.id);
console.log(`Client disconnected, socket ID: ${socket.id}`);
});
});
console.log(`Signaling server running on port ${PORT}`);
const Ministun = require("ministun");
const stunConfig = {
udp4: true,
udp6: true,
port: 3478,
log: console.log,
err: console.err,
sw: true
};
const server = new Ministun(stunConfig);
console.log(`STUN server running on port ${stunConfig.port}`)

View File

@ -0,0 +1,11 @@
{
"name": "nostr-webrtc-server",
"dependencies": {
"ministun": "^1.0.6",
"nostr-tools": "^2.0.2",
"socket.io": "^4.7.2"
},
"scripts": {
"start": "node index.js"
}
}