From 676fd91cdc1dfa26c9244ebff0e07288f8edcd3c Mon Sep 17 00:00:00 2001 From: John Corser Date: Sun, 17 May 2026 11:08:17 -0400 Subject: [PATCH 1/5] fix: default preferHls to true on Safari Safari has poor DASH/MSE support, causing error 3016 (VIDEO_ERROR / PIPELINE_ERROR_DECODE) when playing videos via generated DASH manifests. Since Safari natively supports HLS, default preferHls to true on Safari while keeping the existing default (false) for other browsers. Users can still override this in preferences. --- src/components/VideoPlayer.vue | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/components/VideoPlayer.vue b/src/components/VideoPlayer.vue index d869e6d699..46eecc1418 100644 --- a/src/components/VideoPlayer.vue +++ b/src/components/VideoPlayer.vue @@ -587,6 +587,7 @@ async function loadVideo() { streams.push(...props.video.videoStreams); const MseSupport = window.MediaSource !== undefined || window.ManagedMediaSource !== undefined; + const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); const lbry = null; @@ -600,7 +601,7 @@ async function loadVideo() { props.video.audioStreams.length > 0 && !lbry && MseSupport && - !getPreferenceBoolean("preferHls", false) + !getPreferenceBoolean("preferHls", isSafari) ) { if (!props.video.dash) { const dash = (await import("../utils/DashUtils.js")).generate_dash_file_from_formats( @@ -638,7 +639,7 @@ async function loadVideo() { return response.headers.get("Content-Type"); }); mime = contentType; - } else if (props.video.dash && !getPreferenceBoolean("preferHls", false)) { + } else if (props.video.dash && !getPreferenceBoolean("preferHls", isSafari)) { uri = props.video.dash; mime = "application/dash+xml"; } else if (props.video.hls) { From d5bcc23902e738288a6abb64a5d1749692dae7c0 Mon Sep 17 00:00:00 2001 From: John Corser Date: Sun, 17 May 2026 11:12:00 -0400 Subject: [PATCH 2/5] ci: specify node-version 22 for pnpm compatibility pnpm@latest now requires Node.js v22.13+. Without an explicit node-version, the runner uses its default which is too old. --- .github/workflows/ci.yml | 1 + .github/workflows/reviewdog.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6ba3c0a924..afe1191156 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,6 +16,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v6 with: + node-version: 22 cache: "pnpm" - run: pnpm install - run: pnpm build diff --git a/.github/workflows/reviewdog.yml b/.github/workflows/reviewdog.yml index 1b2e209b40..e3e1d06c94 100644 --- a/.github/workflows/reviewdog.yml +++ b/.github/workflows/reviewdog.yml @@ -16,6 +16,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v6 with: + node-version: 22 cache: "pnpm" - run: pnpm install - uses: reviewdog/action-eslint@v1 From 852610a8509534a7acd7fbc03a065878aa2c91e5 Mon Sep 17 00:00:00 2001 From: John Corser Date: Sun, 17 May 2026 11:13:35 -0400 Subject: [PATCH 3/5] chore: add explanatory comments for Safari HLS default --- src/components/VideoPlayer.vue | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/components/VideoPlayer.vue b/src/components/VideoPlayer.vue index 46eecc1418..070cdd48c2 100644 --- a/src/components/VideoPlayer.vue +++ b/src/components/VideoPlayer.vue @@ -587,6 +587,7 @@ async function loadVideo() { streams.push(...props.video.videoStreams); const MseSupport = window.MediaSource !== undefined || window.ManagedMediaSource !== undefined; + // Safari has limited MSE/DASH support, so we default to native HLS playback. const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); const lbry = null; @@ -639,6 +640,7 @@ async function loadVideo() { return response.headers.get("Content-Type"); }); mime = contentType; + // Safari defaults to HLS due to limited MSE/DASH support (see isSafari above). } else if (props.video.dash && !getPreferenceBoolean("preferHls", isSafari)) { uri = props.video.dash; mime = "application/dash+xml"; From 2ec8e99fc2679460c1498365c3539140cdf9270d Mon Sep 17 00:00:00 2001 From: John Corser Date: Sun, 17 May 2026 11:14:20 -0400 Subject: [PATCH 4/5] ci: pin pnpm to major version 10 pnpm@latest now enforces onlyBuiltDependencies by default, causing ERR_PNPM_IGNORED_BUILDS. Pin to version 10 for compatibility. --- .github/workflows/ci.yml | 2 +- .github/workflows/reviewdog.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index afe1191156..c6be4ee953 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,7 +12,7 @@ jobs: - name: Setup pnpm uses: pnpm/action-setup@v5 with: - version: latest + version: 10 - name: Setup Node.js uses: actions/setup-node@v6 with: diff --git a/.github/workflows/reviewdog.yml b/.github/workflows/reviewdog.yml index e3e1d06c94..b8204864d0 100644 --- a/.github/workflows/reviewdog.yml +++ b/.github/workflows/reviewdog.yml @@ -12,7 +12,7 @@ jobs: - name: Setup pnpm uses: pnpm/action-setup@v5 with: - version: latest + version: 10 - name: Setup Node.js uses: actions/setup-node@v6 with: From 91289d596be2de0335215108efc5ddd9ae8e5eb5 Mon Sep 17 00:00:00 2001 From: John Corser Date: Sun, 17 May 2026 11:15:27 -0400 Subject: [PATCH 5/5] style: fix comment indentation --- src/components/VideoPlayer.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/VideoPlayer.vue b/src/components/VideoPlayer.vue index 070cdd48c2..e2bfd0e7a7 100644 --- a/src/components/VideoPlayer.vue +++ b/src/components/VideoPlayer.vue @@ -640,7 +640,7 @@ async function loadVideo() { return response.headers.get("Content-Type"); }); mime = contentType; - // Safari defaults to HLS due to limited MSE/DASH support (see isSafari above). + // Safari defaults to HLS due to limited MSE/DASH support (see isSafari above). } else if (props.video.dash && !getPreferenceBoolean("preferHls", isSafari)) { uri = props.video.dash; mime = "application/dash+xml";