source移除仅对ios Safari生效

This commit is contained in:
mtvpls
2026-08-03 16:12:55 +08:00
parent 00f0995762
commit ebb24a23f4
+11 -1
View File
@@ -3813,12 +3813,22 @@ function PlayPageClient() {
if (!video || !url) return; if (!video || !url) return;
const sources = Array.from(video.getElementsByTagName('source')); const sources = Array.from(video.getElementsByTagName('source'));
const isHlsJsActive = !!(video as any).hls; const isHlsJsActive = !!(video as any).hls;
const userAgent = typeof navigator !== 'undefined' ? navigator.userAgent : '';
const isIOSWebKit =
/iPad|iPhone|iPod/i.test(userAgent) ||
(/Macintosh/i.test(userAgent) &&
typeof navigator !== 'undefined' &&
navigator.maxTouchPoints > 1);
const isSafari =
isIOSWebKit ||
(/Safari/i.test(userAgent) &&
!/Chrome|Chromium|Edg|OPR|Android/i.test(userAgent));
const isHlsLikeSource = const isHlsLikeSource =
/\.m3u8?($|\?)/i.test(url) || /\.m3u8?($|\?)/i.test(url) ||
url.includes('/api/proxy-m3u8') || url.includes('/api/proxy-m3u8') ||
url.includes('/api/proxy/vod/m3u8'); url.includes('/api/proxy/vod/m3u8');
if (isHlsJsActive && isHlsLikeSource) { if (isSafari && isHlsJsActive && isHlsLikeSource) {
// HLS 由 hls.js 接管时,不能再给 <video> 塞原始 m3u8 source // HLS 由 hls.js 接管时,不能再给 <video> 塞原始 m3u8 source
// 否则 Safari 可能切回原生 HLS,和 MSE/hls.js 抢同一个播放器。 // 否则 Safari 可能切回原生 HLS,和 MSE/hls.js 抢同一个播放器。
sources.forEach((s) => s.remove()); sources.forEach((s) => s.remove());