zoom : webRTC - offers, answers, ice candidate

This commit is contained in:
haerong22
2021-10-24 20:20:40 +09:00
parent d03396347f
commit 4463b0854e
3 changed files with 68 additions and 9 deletions

View File

@@ -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;
}

View File

@@ -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`);

View File

@@ -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")