npv2k1 commited on
Commit
87ce2bc
·
1 Parent(s): 4af01e7

feat: add broadcaster HTML template for WebRTC room functionality

Browse files
Files changed (1) hide show
  1. templates/broadcaster.html +65 -0
templates/broadcaster.html ADDED
@@ -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>