61 lines
1.7 KiB
HTML
61 lines
1.7 KiB
HTML
<html>
|
|
<head>
|
|
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
|
|
<style>
|
|
body {
|
|
padding: 0;
|
|
margin: 0;
|
|
widows: 100%;
|
|
height: 100%;
|
|
}
|
|
|
|
video {
|
|
width: 100%;
|
|
}
|
|
</style>
|
|
<script>
|
|
var messageChannel = '{{message_channel}}';
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<video id="screen" width="100%" controls></video>
|
|
<script>
|
|
if (Hls.isSupported()) {
|
|
var video = document.getElementById('screen');
|
|
var hls = new Hls();
|
|
hls.on(Hls.Events.ERROR, function (event, data) {
|
|
if (data.fatal) {
|
|
switch(data.type) {
|
|
case Hls.ErrorTypes.NETWORK_ERROR:
|
|
// try to recover network error
|
|
console.log("fatal network error encountered, try to recover");
|
|
hls.startLoad();
|
|
break;
|
|
case Hls.ErrorTypes.MEDIA_ERROR:
|
|
console.log("fatal media error encountered, try to recover");
|
|
hls.recoverMediaError();
|
|
break;
|
|
default:
|
|
// cannot recover
|
|
hls.destroy();
|
|
break;
|
|
}
|
|
}
|
|
});
|
|
// bind them together
|
|
hls.attachMedia(video);
|
|
hls.on(Hls.Events.MEDIA_ATTACHED, function () {
|
|
console.log("video and hls.js are now bound together !");
|
|
hls.loadSource("{{stream_url}}");
|
|
hls.on(Hls.Events.MANIFEST_PARSED, function (event, data) {
|
|
console.log("manifest loaded, found " + data.levels.length + " quality level");
|
|
video.play();
|
|
video.onloadedmetadata = function() {
|
|
window[messageChannel].postMessage(document.body.clientWidth / video.offsetHeight);
|
|
};
|
|
});
|
|
});
|
|
}
|
|
</script>
|
|
</body>
|
|
</html> |