|
@@ -12,7 +12,7 @@ function setup_playback(description) {
|
|
|
player.addEventListener("pause", (event) => playStateChanged(false));
|
|
|
player.addEventListener("playing", (event) => playStateChanged(true));
|
|
|
|
|
|
- filteredOptions = filterOptions(description.entries);
|
|
|
+ filteredOptions = description.entries.filter(o => shouldOfferStream(o, description.entries));
|
|
|
if(filteredOptions.length == 0){
|
|
|
player.src = "invalid://invalid";
|
|
|
document.getElementById("unplayable-modal").showModal();
|
|
@@ -51,16 +51,35 @@ function qualitySelected() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-function filterOptions(options) {
|
|
|
- player = document.getElementById("player");
|
|
|
- return options.filter(o => o.type === "video" && canPlayStream(o) && (o.metadata.alternative_to == undefined || !canPlayStream(options.find(s => s.label == o.metadata.alternative_to))));
|
|
|
-}
|
|
|
-
|
|
|
function canPlayStream(stream) {
|
|
|
+ if(stream.type !== "video") {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
player = document.getElementById("player");
|
|
|
return player.canPlayType(`${stream.mimetype}; codecs="${stream.metadata.codecs}"`);
|
|
|
}
|
|
|
|
|
|
+function shouldOfferStream(stream, streams) {
|
|
|
+ if(!canPlayStream(stream)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if(stream.metadata.alternative_to == undefined) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return !hasHigherUsableAlternative(stream, streams);
|
|
|
+}
|
|
|
+
|
|
|
+function hasHigherUsableAlternative(stream, streams) {
|
|
|
+ if(stream.metadata.alternative_to == undefined) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ parent = streams.find(s => s.label == stream.metadata.alternative_to);
|
|
|
+ if(canPlayStream(parent)) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return hasHigherUsableAlternative(parent, streams);
|
|
|
+}
|
|
|
+
|
|
|
function findOptimalOptionForScreen(options) {
|
|
|
screenSize = Math.max(window.screen.width, window.screen.height);
|
|
|
screenSize = screenSize * window.devicePixelRatio
|