From 9026fd8beac07d618543ae6eedd291d16f56d80f Mon Sep 17 00:00:00 2001 From: Karlis Cudars Date: Wed, 21 Jul 2021 02:40:21 +0300 Subject: [PATCH] Check and store browser video codec compatibility, populate players getPreferedVideoCodecs only with supported codecs --- src/components/Player.vue | 41 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/src/components/Player.vue b/src/components/Player.vue index 49e829b2..61875b3b 100644 --- a/src/components/Player.vue +++ b/src/components/Player.vue @@ -167,14 +167,17 @@ export default { const disableVideo = this.getPreferenceBoolean("listen", false) && !this.video.livestream; + var preferedVideoCodecs = this.getPreferedVideoCodecs(); + this.player.configure({ - preferredVideoCodecs: ["av01", "vp9", "avc1"], + preferredVideoCodecs: preferedVideoCodecs, preferredAudioCodecs: ["opus", "mp4a"], manifest: { disableVideo: disableVideo, }, }); + const quality = this.getPreferenceNumber("quality", 0); const qualityConds = quality > 0 && (this.video.audioStreams.length > 0 || this.video.livestream) && !disableVideo; @@ -210,6 +213,42 @@ export default { videoEl.volume = this.getPreferenceNumber("volume", 1); }); }, + checkBrowserVideoMP4Support() { + var testEl = document.createElement("video"); + if ( testEl.canPlayType ) { + // Check for MPEG-4 support + var av01 = "" !== testEl.canPlayType( 'video/mp4; codecs="av01"' ); + var vp9 = "" !== testEl.canPlayType( 'video/mp4; codecs="vp9"' ); + var avc1 = "" !== testEl.canPlayType( 'video/mp4; codecs="avc1"' ); + + this.setPreference("SupportsVideoMP4av01", av01); + this.setPreference("SupportsVideoMP4vp9", vp9); + this.setPreference("SupportsVideoMP4avc1", avc1); + } + }, + getPreferedVideoCodecs() { + var preferedVideoCodecs = []; + + // First check if need to set local storage params + if (this.getPreferenceBoolean("SupportsVideoMP4av01", "notPresent") === "notPresent" || + this.getPreferenceBoolean("SupportsVideoMP4vp9", "notPresent") === "notPresent" || + this.getPreferenceBoolean("SupportsVideoMP4avc1", "notPresent") === "notPresent") { + this.checkBrowserVideoMP4Support(); + } + + // Populate array with supported codecs + if (this.getPreferenceBoolean("SupportsVideoMP4av01")) { + preferedVideoCodecs.push("av01"); + } + if (this.getPreferenceBoolean("SupportsVideoMP4vp9")) { + preferedVideoCodecs.push("vp9"); + } + if (this.getPreferenceBoolean("SupportsVideoMP4avc1")) { + preferedVideoCodecs.push("avc1"); + } + + return preferedVideoCodecs; + } }, activated() { import("hotkeys-js")