diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6ba3c0a924..c6be4ee953 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,10 +12,11 @@ jobs: - name: Setup pnpm uses: pnpm/action-setup@v5 with: - version: latest + version: 10 - 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..b8204864d0 100644 --- a/.github/workflows/reviewdog.yml +++ b/.github/workflows/reviewdog.yml @@ -12,10 +12,11 @@ jobs: - name: Setup pnpm uses: pnpm/action-setup@v5 with: - version: latest + version: 10 - name: Setup Node.js uses: actions/setup-node@v6 with: + node-version: 22 cache: "pnpm" - run: pnpm install - uses: reviewdog/action-eslint@v1 diff --git a/src/components/VideoPlayer.vue b/src/components/VideoPlayer.vue index d869e6d699..e2bfd0e7a7 100644 --- a/src/components/VideoPlayer.vue +++ b/src/components/VideoPlayer.vue @@ -587,6 +587,8 @@ 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; @@ -600,7 +602,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 +640,8 @@ async function loadVideo() { return response.headers.get("Content-Type"); }); mime = contentType; - } else if (props.video.dash && !getPreferenceBoolean("preferHls", false)) { + // 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"; } else if (props.video.hls) {