Update css/player-base.js

This commit is contained in:
ashley 2025-08-27 09:45:42 +02:00
parent 15120a02df
commit 889cdc3f3b

View File

@ -20,45 +20,96 @@ var _yt_player = videojs;
document.addEventListener("DOMContentLoaded", () => {
const qs = new URLSearchParams(location.search);
const vidKey = qs.get("v") || "";
document.addEventListener('DOMContentLoaded', () => {
// delete progress key like "progress-<videoId>"
const qs = new URLSearchParams(location.search);
const vidKey = qs.get('v') || '';
if (vidKey) { try { localStorage.removeItem(`progress-${vidKey}`); } catch {} }
const player = videojs('video', {
// --- Capability preflight (helps explain "No decoders..." errors) ---
const can = (mime) => {
try {
// Check MSE container+codec support
return (window.MediaSource && MediaSource.isTypeSupported && MediaSource.isTypeSupported(mime)) ? 'MSE' :
(document.createElement('video').canPlayType(mime) ? 'native' : '');
} catch { return ''; }
};
// Common DASH fMP4 mime+codec combos
const checks = [
'video/mp4; codecs="avc1.4d401f"', // H.264 baseline/main/high
'video/mp4; codecs="avc1.640028"', // H.264 High@L4.0/4.2
'video/mp4; codecs="hev1.1.6.L120.90"', // HEVC (rare on web; Safari/macOS only)
'video/mp4; codecs="vp09.00.10.08"', // VP9 in MP4 (spotty)
'video/mp4; codecs="av01.0.05M.08"', // AV1 in MP4 (newer browsers)
'audio/mp4; codecs="mp4a.40.2"', // AAC-LC
'audio/mp4; codecs="mp4a.40.5"' // HE-AAC
];
const support = {};
checks.forEach(m => support[m] = can(m));
// If you see empty strings for everything except AAC, your MPD must include H.264/AAC reps.
// init Video.js with VHS (bundled in v7/v8)
const player = videojs('video', {
controls: true,
autoplay: false,
preload: 'auto',
html5: {
vhs: {
// VHS handles MPEG-DASH from <source type="application/dash+xml">
overrideNative: true, // prefer VHS over any native MSE impl quirks
enableLowInitialPlaylist: true
overrideNative: true, // make sure VHS handles DASH
enableLowInitialPlaylist: true,
withCredentials: false
}
}
});
// optional: tiny robustness without UI changes (safe, quiet)
// Take the <source> but set programmatically so native doesnt grab it first
const tag = document.getElementById('video').querySelector('source');
const src = tag ? { src: tag.getAttribute('src'), type: tag.getAttribute('type') } : null;
player.ready(() => {
// Quick sanity: if no likely video codec is supported, warn in console (helps debugging)
const hasLikelyVideo =
support['video/mp4; codecs="avc1.4d401f"'] ||
support['video/mp4; codecs="avc1.640028"'] ||
support['video/mp4; codecs="vp09.00.10.08"'] ||
support['video/mp4; codecs="av01.0.05M.08"'];
const hasAAC =
support['audio/mp4; codecs="mp4a.40.2"'] || support['audio/mp4; codecs="mp4a.40.5"'];
if (!hasLikelyVideo) {
console.warn('[DASH] Browser lacks support for common DASH video codecs (H.264/VP9/AV1). ' +
'Ensure your MPD includes H.264 (avc1) fMP4 reps.');
}
if (!hasAAC) {
console.warn('[DASH] Browser lacks AAC support; include AAC (mp4a.40.2) audio reps in MPD.');
}
if (src && src.src) {
player.src(src); // { src: MPD_URL, type: 'application/dash+xml' }
}
});
// Quiet retry for transient net/decode stalls (same MPD, no alternates)
player.on('error', () => {
const err = player.error();
// ignore genuine "not supported"; only attempt a quiet refresh for net/decode stalls
// Only retry if it looks like a transient network/decoder stall
if (!err || err.code === 2 || err.code === 3) {
const ct = player.currentTime() || 0;
const src = player.currentSource(); // {src, type}
const keep = player.currentTime() || 0;
const cur = player.currentSource(); // {src, type}
try {
player.pause();
// re-set the same MPD silently
if (src && src.src) player.src(src);
if (cur && cur.src) player.src(cur);
player.one('loadeddata', () => {
try { if (isFinite(ct) && ct > 0) player.currentTime(ct); } catch {}
try { if (isFinite(keep) && keep > 0) player.currentTime(keep); } catch {}
player.play().catch(()=>{});
});
} catch {}
}
});
// Log what the browser says it supports—helps diagnose “No decoders...” cases:
console.debug('[DASH capability]', support);
});