Skip to content

Commit 87ce2bc

Browse files
committed
feat: add broadcaster HTML template for WebRTC room functionality
1 parent 4af01e7 commit 87ce2bc

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed

templates/broadcaster.html

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8" />
5+
<title>Broadcaster - WebRTC Room</title>
6+
<link rel="stylesheet" href="/styles.css" />
7+
</head>
8+
<body>
9+
<h1>Broadcaster - Room: <span id="roomName"></span></h1>
10+
<video id="localVideo" autoplay muted playsinline></video>
11+
<script src="/socket.io/socket.io.js"></script>
12+
<script>
13+
const socket = io();
14+
const roomName = window.location.pathname.split("/").pop();
15+
document.getElementById("roomName").textContent = roomName;
16+
let peer;
17+
18+
socket.emit("join-room", { roomName, type: "broadcaster" });
19+
20+
async function startStream() {
21+
const stream = await navigator.mediaDevices.getUserMedia({
22+
video: true,
23+
audio: true,
24+
});
25+
document.getElementById("localVideo").srcObject = stream;
26+
27+
// Wait for viewer
28+
socket.on("signal", async ({ from, data }) => {
29+
if (!peer) {
30+
peer = new RTCPeerConnection();
31+
stream.getTracks().forEach((track) => peer.addTrack(track, stream));
32+
peer.onicecandidate = (e) => {
33+
if (e.candidate)
34+
socket.emit("signal", {
35+
to: from,
36+
data: { candidate: e.candidate },
37+
});
38+
};
39+
peer.onnegotiationneeded = async () => {
40+
const offer = await peer.createOffer();
41+
await peer.setLocalDescription(offer);
42+
socket.emit("signal", {
43+
to: from,
44+
data: { desc: peer.localDescription },
45+
});
46+
};
47+
}
48+
if (data.desc) {
49+
await peer.setRemoteDescription(data.desc);
50+
if (data.desc.type === "offer") {
51+
const answer = await peer.createAnswer();
52+
await peer.setLocalDescription(answer);
53+
socket.emit("signal", {
54+
to: from,
55+
data: { desc: peer.localDescription },
56+
});
57+
}
58+
}
59+
if (data.candidate) await peer.addIceCandidate(data.candidate);
60+
});
61+
}
62+
startStream();
63+
</script>
64+
</body>
65+
</html>

0 commit comments

Comments
 (0)