/getManifest/i, /\?.*type=video/i, /\?.*format=video/i, /\?.*mime=video/i, /\?.*video/i, /contentType=video/i, /mimeType=video/i ]; for (var i = 0; i < mediaPatterns.length; i++) { if (mediaPatterns[i].test(url)) return true; } return false; } // 监听iframe传来的网速信息 window.addEventListener('message', function(e) { if (e.data && e.data.type === 'speedUpdate') { pushParentSpeed(e.data.speed, 0.8); } else if (e.data && e.data.type === 'resolutionUpdate') { // 只有分辨率变化时才更新 if (e.data.resolution !== lastDetectedResolution) { lastDetectedResolution = e.data.resolution; const playerResolution = document.getElementById('player-resolution'); if (playerResolution) { playerResolution.textContent = '分辨率: ' + e.data.resolution; } } } }); // 父页面直接监控视频缓冲 function monitorParentVideoBuffer() { try { var videos = document.querySelectorAll('video'); for (var i = 0; i < videos.length; i++) { var video = videos[i]; if (!video._parentBufferMonitor) { video._parentBufferMonitor = { lastBufferEnd: 0, lastTime: Date.now() }; video.addEventListener('progress', function(e) { var target = e.target; var monitor = target._parentBufferMonitor; if (!monitor) return; var now = Date.now(); if (target.buffered && target.buffered.length > 0) { var bufferEnd = target.buffered.end(target.buffered.length - 1); var bufferedTime = bufferEnd - monitor.lastBufferEnd; var dt = (now - monitor.lastTime) / 1000; if (dt >= 0.1 && bufferedTime > 0) { var bitrate = estimateParentBitrate(target); if (bitrate > 0) { var bytesPerSecond = bitrate / 8; pushParentSpeed(bytesPerSecond, 0.4); } monitor.lastBufferEnd = bufferEnd; monitor.lastTime = now; } } }); } } } catch(e) {} } function estimateParentBitrate(video) { try { if (video.videoWidth && video.videoHeight) { var pixels = video.videoWidth * video.videoHeight; if (pixels >= 8294400) return 8000000; if (pixels >= 2073600) return 4000000; if (pixels >= 921600) return 2000000; if (pixels >= 408960) return 1000000; return 500000; } } catch(e) {} return 0; } // 父页面网速衰减 function parentSpeedDecay() { var timeSinceLastUpdate = Date.now() - parentLastSpeedTime; if (timeSinceLastUpdate > 2000 && parentCurrentSpeed > 0) { if (timeSinceLastUpdate > 5000) { parentCurrentSpeed *= 0.7; } else if (timeSinceLastUpdate > 3000) { parentCurrentSpeed *= 0.85; } else { parentCurrentSpeed *= 0.95; } if (parentCurrentSpeed < 100) parentCurrentSpeed = 0; updateSpeedDisplay(parentCurrentSpeed); } } setInterval(monitorParentVideoBuffer, 500); setInterval(parentSpeedDecay, 500); // 监控视频播放状态,控制分辨率显示 function monitorVideoPlayback() { const resolutionElement = document.getElementById('player-resolution'); if (resolutionElement) { // 查找所有视频元素 const videos = document.querySelectorAll('video'); let isPlaying = false; for (let i = 0; i < videos.length; i++) { const video = videos[i]; if (!video.paused && !video.ended) { isPlaying = true; break; } } // 检查iframe中的视频状态 const iframes = document.querySelectorAll('iframe'); iframes.forEach(iframe => { try { const iframeDoc = iframe.contentDocument || iframe.contentWindow.document; const iframeVideos = iframeDoc.querySelectorAll('video'); for (let i = 0; i < iframeVideos.length; i++) { const video = iframeVideos[i]; if (!video.paused && !video.ended) { isPlaying = true; break; } } } catch (e) { // 跨域错误,忽略 } }); resolutionElement.style.display = 'block'; resolutionElement.style.opacity = '1'; resolutionElement.style.visibility = 'visible'; } } // 每100毫秒检查一次视频播放状态 setInterval(monitorVideoPlayback, 100); // 监听视频事件 function setupVideoEventListeners() { const videos = document.querySelectorAll('video'); videos.forEach(function(video) { video.addEventListener('play', monitorVideoPlayback); video.addEventListener('pause', monitorVideoPlayback); video.addEventListener('ended', monitorVideoPlayback); }); } // 设置视频事件监听器 setupVideoEventListeners();