mirror of
https://gitlab.crans.org/nounous/ghostream.git
synced 2024-12-22 19:42:20 +00:00
Working javascript modules
This commit is contained in:
parent
c88f473ec0
commit
0b3fb87fa2
@ -1,65 +1,75 @@
|
|||||||
import { GSWebSocket } from "./modules/websocket.js";
|
import { GsWebSocket } from "./modules/websocket.js";
|
||||||
import { ViewerCounter } from "./modules/viewerCounter.js";
|
import { ViewerCounter } from "./modules/viewerCounter.js";
|
||||||
|
|
||||||
// Some variables that need to be fixed by web page
|
/**
|
||||||
const ViewersCounterRefreshPeriod = 1000;
|
* Initialize viewer page
|
||||||
const stream = "demo";
|
*
|
||||||
let quality = "source";
|
* @param {String} stream
|
||||||
|
* @param {List} stunServers
|
||||||
|
* @param {Number} viewersCounterRefreshPeriod
|
||||||
|
*/
|
||||||
|
export function initViewerPage(stream, stunServers, viewersCounterRefreshPeriod) {
|
||||||
|
// Default quality
|
||||||
|
let quality = "source";
|
||||||
|
|
||||||
// Create WebSocket
|
// Create WebSocket
|
||||||
const s = new GSWebSocket();
|
const s = new GsWebSocket();
|
||||||
s.open();
|
s.open();
|
||||||
|
|
||||||
// Register keyboard events
|
// Create WebRTC
|
||||||
const viewer = document.getElementById("viewer");
|
// FIXME startPeerConnection() with stunServers
|
||||||
window.addEventListener("keydown", (event) => {
|
|
||||||
switch (event.key) {
|
|
||||||
case "f":
|
|
||||||
// F key put player in fullscreen
|
|
||||||
if (document.fullscreenElement !== null) {
|
|
||||||
document.exitFullscreen();
|
|
||||||
} else {
|
|
||||||
viewer.requestFullscreen();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "m":
|
|
||||||
case " ":
|
|
||||||
// M and space key mute player
|
|
||||||
viewer.muted = !viewer.muted;
|
|
||||||
event.preventDefault();
|
|
||||||
viewer.play();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Create viewer counter
|
// Register keyboard events
|
||||||
const viewerCounter = new ViewerCounter(
|
const viewer = document.getElementById("viewer");
|
||||||
document.getElementById("connected-people"),
|
window.addEventListener("keydown", (event) => {
|
||||||
stream,
|
switch (event.key) {
|
||||||
);
|
case "f":
|
||||||
viewerCounter.regularUpdate(ViewersCounterRefreshPeriod);
|
// F key put player in fullscreen
|
||||||
|
if (document.fullscreenElement !== null) {
|
||||||
// Side widget toggler
|
document.exitFullscreen();
|
||||||
const sideWidgetToggle = document.getElementById("sideWidgetToggle");
|
} else {
|
||||||
const sideWidget = document.getElementById("sideWidget");
|
viewer.requestFullscreen();
|
||||||
if (sideWidgetToggle !== null && sideWidget !== null) {
|
}
|
||||||
// On click, toggle side widget visibility
|
break;
|
||||||
sideWidgetToggle.addEventListener("click", function () {
|
case "m":
|
||||||
if (sideWidget.style.display === "none") {
|
case " ":
|
||||||
sideWidget.style.display = "block";
|
// M and space key mute player
|
||||||
sideWidgetToggle.textContent = "»";
|
viewer.muted = !viewer.muted;
|
||||||
} else {
|
event.preventDefault();
|
||||||
sideWidget.style.display = "none";
|
viewer.play();
|
||||||
sideWidgetToggle.textContent = "«";
|
break;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Create viewer counter
|
||||||
|
const viewerCounter = new ViewerCounter(
|
||||||
|
document.getElementById("connected-people"),
|
||||||
|
stream,
|
||||||
|
);
|
||||||
|
viewerCounter.regularUpdate(viewersCounterRefreshPeriod);
|
||||||
|
|
||||||
|
// Side widget toggler
|
||||||
|
const sideWidgetToggle = document.getElementById("sideWidgetToggle");
|
||||||
|
const sideWidget = document.getElementById("sideWidget");
|
||||||
|
if (sideWidgetToggle !== null && sideWidget !== null) {
|
||||||
|
// On click, toggle side widget visibility
|
||||||
|
sideWidgetToggle.addEventListener("click", function () {
|
||||||
|
if (sideWidget.style.display === "none") {
|
||||||
|
sideWidget.style.display = "block";
|
||||||
|
sideWidgetToggle.textContent = "»";
|
||||||
|
} else {
|
||||||
|
sideWidget.style.display = "none";
|
||||||
|
sideWidgetToggle.textContent = "«";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Video quality toggler
|
||||||
|
document.getElementById("quality").addEventListener("change", (event) => {
|
||||||
|
quality = event.target.value;
|
||||||
|
console.log(`Stream quality changed to ${quality}`);
|
||||||
|
|
||||||
|
// Restart the connection with a new quality
|
||||||
|
// FIXME
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Video quality toggler
|
|
||||||
document.getElementById("quality").addEventListener("change", (event) => {
|
|
||||||
quality = event.target.value;
|
|
||||||
console.log(`Stream quality changed to ${quality}`);
|
|
||||||
|
|
||||||
// Restart the connection with a new quality
|
|
||||||
// FIXME
|
|
||||||
});
|
|
||||||
|
@ -34,18 +34,17 @@
|
|||||||
{{end}}
|
{{end}}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script type="module" src="/static/js/main.js"></script>
|
<script type="module">
|
||||||
<script>
|
import { initViewerPage } from "/static/js/main.js";
|
||||||
|
|
||||||
|
// Some variables that need to be fixed by web page
|
||||||
|
const viewersCounterRefreshPeriod = Number("{{.Cfg.ViewersCounterRefreshPeriod}}");
|
||||||
|
const stream = "{{.Path}}";
|
||||||
const stunServers = [
|
const stunServers = [
|
||||||
{{range $id, $value := .Cfg.STUNServers}}
|
{{range $id, $value := .Cfg.STUNServers}}
|
||||||
"{{$value}}",
|
"{{$value}}",
|
||||||
{{end}}
|
{{end}}
|
||||||
]
|
]
|
||||||
startPeerConnection()
|
initViewerPage(stream, stunServers, viewersCounterRefreshPeriod)
|
||||||
|
|
||||||
// Wait a bit before pulling viewers counter for the first time
|
|
||||||
setTimeout(() => {
|
|
||||||
refreshViewersCounter("{{.Path}}", {{.Cfg.ViewersCounterRefreshPeriod}})
|
|
||||||
}, 1000)
|
|
||||||
</script>
|
</script>
|
||||||
{{end}}
|
{{end}}
|
||||||
|
Loading…
Reference in New Issue
Block a user