From bc621aacdfe2876fed008255c9d759d992545706 Mon Sep 17 00:00:00 2001 From: CodeDevMLH <145071728+CodeDevMLH@users.noreply.github.com> Date: Fri, 6 Mar 2026 00:21:54 +0100 Subject: [PATCH] test --- .../Web/mediaBarEnhanced.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Jellyfin.Plugin.MediaBarEnhanced/Web/mediaBarEnhanced.js b/Jellyfin.Plugin.MediaBarEnhanced/Web/mediaBarEnhanced.js index 0bf311c..feb32e0 100644 --- a/Jellyfin.Plugin.MediaBarEnhanced/Web/mediaBarEnhanced.js +++ b/Jellyfin.Plugin.MediaBarEnhanced/Web/mediaBarEnhanced.js @@ -1403,7 +1403,9 @@ const ApiUtils = { return { id: trailer.Id, - url: `${STATE.jellyfinData.serverAddress}/Videos/${trailer.Id}/stream.mp4?mediaSourceId=${mediaSourceId}&api_key=${STATE.jellyfinData.accessToken}` + // static=true forces Jellyfin to direct-stream (no transcoding) which enables + // HTTP Range Requests (Accept-Ranges: bytes) — required by Safari for video playback + url: `${STATE.jellyfinData.serverAddress}/Videos/${trailer.Id}/stream.mp4?mediaSourceId=${mediaSourceId}&api_key=${STATE.jellyfinData.accessToken}&static=true` }; } return null; @@ -1798,6 +1800,8 @@ const SlideCreator = { const iframe = event.target.getIframe(); if (iframe) { iframe.setAttribute('referrerpolicy', 'strict-origin-when-cross-origin'); + // Full allow attribute matching what YouTube sets on their own embed pages + iframe.setAttribute('allow', 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share'); } // Store start/end time and videoId for later use @@ -1928,7 +1932,10 @@ const SlideCreator = { }); videoBackdrop.addEventListener('error', (event) => { - console.warn(`Local video error for item ${itemId}`); + const src = event.target.src || event.target.getAttribute('data-src') || 'unknown'; + const errCode = event.target.error ? event.target.error.code : 'n/a'; + const errMsg = event.target.error ? event.target.error.message : 'n/a'; + console.warn(`Local video error for item ${itemId} | code=${errCode} | msg=${errMsg} | url=${src}`); const slide = event.target.closest('.slide'); if (slide && slide.classList.contains('active')) { SlideshowManager.nextSlide();