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