diff --git a/frontend/js/views/content-library.js b/frontend/js/views/content-library.js index 3049c96..fc9c16c 100644 --- a/frontend/js/views/content-library.js +++ b/frontend/js/views/content-library.js @@ -473,7 +473,7 @@ function showPreview(content) {
${isYoutube - ? `` + ? `` : isVideo ? `` : `` diff --git a/server/player/index.html b/server/player/index.html index d11f640..190004a 100644 --- a/server/player/index.html +++ b/server/player/index.html @@ -504,6 +504,16 @@ } // ==================== Content Rendering ==================== + function fixYoutubeUrl(url) { + try { + const u = new URL(url); + if (!u.searchParams.has('mute')) u.searchParams.set('mute', '1'); + if (!u.searchParams.has('enablejsapi')) u.searchParams.set('enablejsapi', '1'); + if (!u.searchParams.has('origin')) u.searchParams.set('origin', window.location.origin); + return u.toString(); + } catch { return url; } + } + function renderContent(item) { const container = document.getElementById('playerContainer'); container.style.display = 'block'; @@ -522,7 +532,7 @@ // Fullscreen if (isYoutube) { const iframe = document.createElement('iframe'); - iframe.src = src; + iframe.src = fixYoutubeUrl(src); iframe.allow = 'autoplay; encrypted-media'; iframe.allowFullscreen = true; iframe.style.cssText = 'width:100%;height:100%;border:none;background:#000'; @@ -584,7 +594,7 @@ div.appendChild(iframe); } else if (isYoutubeZone) { const iframe = document.createElement('iframe'); - iframe.src = src; + iframe.src = fixYoutubeUrl(src); iframe.allow = 'autoplay; encrypted-media'; iframe.allowFullscreen = true; iframe.style.cssText = 'width:100%;height:100%;border:none'; diff --git a/server/routes/content.js b/server/routes/content.js index 6e4eb84..b86d854 100644 --- a/server/routes/content.js +++ b/server/routes/content.js @@ -150,7 +150,7 @@ router.post('/youtube', (req, res) => { if (!videoId) return res.status(400).json({ error: 'Invalid YouTube URL' }); const id = uuidv4(); - const embedUrl = `https://www.youtube.com/embed/${videoId}?autoplay=1&controls=0&rel=0&modestbranding=1&loop=1&playlist=${videoId}`; + const embedUrl = `https://www.youtube.com/embed/${videoId}?autoplay=1&mute=1&controls=0&rel=0&modestbranding=1&loop=1&playlist=${videoId}&enablejsapi=1&origin=${encodeURIComponent(req.protocol + '://' + req.get('host'))}`; const thumbnailUrl = `https://img.youtube.com/vi/${videoId}/hqdefault.jpg`; const filename = name || `YouTube: ${videoId}`;