zoom : webRTC - offers, answers, ice candidate
This commit is contained in:
@@ -12,6 +12,7 @@ let myStream;
|
||||
let mute = false;
|
||||
let camera = false;
|
||||
let roomName;
|
||||
let myPeerConnection;
|
||||
|
||||
|
||||
async function getCameras() {
|
||||
@@ -100,16 +101,18 @@ camerasSelect.addEventListener("input", handleCameraChange);
|
||||
const welcome = document.getElementById("welcome");
|
||||
const welcomeForm = welcome.querySelector("form");
|
||||
|
||||
function startMedia() {
|
||||
async function initCall() {
|
||||
welcome.hidden = true;
|
||||
call.hidden = false;
|
||||
getMedia();
|
||||
await getMedia();
|
||||
makeConnection();
|
||||
}
|
||||
|
||||
function handleWelcomeSubmit(event) {
|
||||
async function handleWelcomeSubmit(event) {
|
||||
event.preventDefault();
|
||||
const input = welcomeForm.querySelector("input");
|
||||
socket.emit("join_room", input.value, startMedia);
|
||||
await initCall();
|
||||
socket.emit("join_room", input.value);
|
||||
roomName = input.value;
|
||||
input.value = "";
|
||||
|
||||
@@ -120,6 +123,50 @@ welcomeForm.addEventListener("submit", handleWelcomeSubmit);
|
||||
|
||||
// Socket Code
|
||||
|
||||
socket.on("welcome", () => {
|
||||
console.log("somebody join room");
|
||||
})
|
||||
socket.on("welcome", async () => {
|
||||
const offer = await myPeerConnection.createOffer();
|
||||
myPeerConnection.setLocalDescription(offer);
|
||||
console.log("sent the offer");
|
||||
socket.emit("offer", offer, roomName);
|
||||
})
|
||||
|
||||
socket.on("offer", async(offer) => {
|
||||
console.log("received the offer");
|
||||
myPeerConnection.setRemoteDescription(offer);
|
||||
const answer = await myPeerConnection.createAnswer();
|
||||
myPeerConnection.setLocalDescription(answer);
|
||||
socket.emit("answer", answer, roomName);
|
||||
console.log("sent the answer");
|
||||
|
||||
})
|
||||
|
||||
socket.on("answer", answer => {
|
||||
console.log("received the answer");
|
||||
myPeerConnection.setRemoteDescription(answer);
|
||||
})
|
||||
|
||||
socket.on("ice", ice => {
|
||||
console.log("received candidate");
|
||||
myPeerConnection.addIceCandidate(ice);
|
||||
})
|
||||
|
||||
// RTC Code
|
||||
|
||||
function makeConnection() {
|
||||
myPeerConnection = new RTCPeerConnection();
|
||||
myPeerConnection.addEventListener("icecandidate", handleIce);
|
||||
myPeerConnection.addEventListener("addstream", handleAddStream);
|
||||
myStream
|
||||
.getTracks()
|
||||
.forEach(track => myPeerConnection.addTrack(track, myStream));
|
||||
}
|
||||
|
||||
function handleIce(data) {
|
||||
console.log("sent candidate");
|
||||
socket.emit("ice", data.candidate, roomName);
|
||||
}
|
||||
|
||||
function handleAddStream(data) {
|
||||
const peerFace = document.getElementById("peerFace");
|
||||
peerFace.srcObject = data.stream;
|
||||
}
|
||||
@@ -14,11 +14,22 @@ const httpServer = http.createServer(app);
|
||||
const wsServer = SocketIO(httpServer);
|
||||
|
||||
wsServer.on("connection", socket => {
|
||||
socket.on("join_room", (roomName, done) => {
|
||||
socket.on("join_room", (roomName) => {
|
||||
socket.join(roomName);
|
||||
done();
|
||||
socket.to(roomName).emit("welcome");
|
||||
})
|
||||
|
||||
socket.on("offer", (offer, roomName) => {
|
||||
socket.to(roomName).emit("offer", offer);
|
||||
})
|
||||
|
||||
socket.on("answer", (answer, roomName) => {
|
||||
socket.to(roomName).emit("answer", answer);
|
||||
});
|
||||
|
||||
socket.on("ice", (ice, roomName) => {
|
||||
socket.to(roomName).emit("ice", ice);
|
||||
})
|
||||
})
|
||||
|
||||
const handleListen = () => console.log(`Listening on http://localhost:3000`);
|
||||
|
||||
@@ -21,6 +21,7 @@ html(lang="en")
|
||||
button#mute Mute
|
||||
button#camera Turn Camera Off
|
||||
select#cameras
|
||||
video#peerFace(autoplay, playsinline, width="400", height="400")
|
||||
|
||||
script(src="/socket.io/socket.io.js")
|
||||
script(src="/public/js/app.js")
|
||||
Reference in New Issue
Block a user