stream-api/frontend/script.js

80 lines
2.6 KiB
JavaScript
Raw Normal View History

2021-05-14 10:54:53 +00:00
(() => {
2021-05-20 16:33:51 +00:00
const findUpstream = () => {
const search = new URLSearchParams(location.search);
search.set("render", "false");
const url = new URL(location.origin);
url.pathname = location.pathname;
url.search = search.toString();
return url.href;
2021-05-20 15:02:45 +00:00
}
2021-05-20 16:33:51 +00:00
const upstream = findUpstream();
2021-05-20 15:02:45 +00:00
const xhr = new XMLHttpRequest();
2021-05-14 10:54:53 +00:00
xhr.open("HEAD", upstream, true);
xhr.send();
let count = 2;
2021-05-20 15:02:45 +00:00
const handleCount = () => {
2021-05-14 10:54:53 +00:00
if(--count === 0) {
handle();
}
}
2021-05-20 15:02:45 +00:00
const handle = () => {
const [body] = document.getElementsByTagName("body");
const video = document.createElement("video");
video.className = "video-js vjs-big-play-centered";
body.appendChild(video);
const ctype = xhr.getResponseHeader("Content-Type");
console.log(ctype);
const options = {};
options.controls = true;
options.liveui = true;
options.responsive = true;
options.fill = true;
options.techOrder = ["chromecast", "html5"];
options.plugins = {};
options.plugins.chromecast = {};
2021-05-21 08:58:13 +00:00
options.plugins.chromecast.addButtonToControlBar = false;
2021-05-20 15:02:45 +00:00
const player = videojs(video, options);
const source = {};
source.type = ctype;
source.src = upstream;
player.src(source);
const Button = videojs.getComponent("Button");
const cbutton = {};
cbutton.clickHandler = (ev) => {
player.trigger("chromecastRequested");
}
2021-05-21 08:58:13 +00:00
cbutton.text = "Chromecast";
const bigCastButton = new Button(player, cbutton);
bigCastButton.addClass("fab");
bigCastButton.addClass("fa-chromecast");
bigCastButton.addClass("vjs-control");
bigCastButton.addClass("vjs-button");
bigCastButton.addClass("vjs-big-chromecast");
2021-05-23 20:02:33 +00:00
player.one("canplay", () => {
player.addChild(bigCastButton);
});
2021-05-21 12:19:12 +00:00
2021-05-21 08:58:13 +00:00
const smallCastButton = new Button(player, cbutton);
smallCastButton.addClass("fab");
smallCastButton.addClass("fa-chromecast");
smallCastButton.addClass("vjs-control");
smallCastButton.addClass("vjs-button");
2021-05-21 18:29:29 +00:00
player.controlBar.addChild(smallCastButton);
2021-05-21 19:03:19 +00:00
player.one("play", () => {
player.removeChild(bigCastButton);
2021-05-21 18:29:29 +00:00
});
2021-05-20 16:33:51 +00:00
player.on("chromecastConnected", () => {
2021-05-20 16:42:50 +00:00
if(player.volume() > 0.3) {
2021-05-20 16:49:19 +00:00
player.volume(0.2);
2021-05-20 16:42:50 +00:00
}
2021-05-20 16:33:51 +00:00
});
2021-05-12 07:50:51 +00:00
}
2021-05-20 16:33:51 +00:00
document.addEventListener("DOMContentLoaded", handleCount);
2021-05-14 10:54:53 +00:00
xhr.addEventListener("load", handleCount);
})();