(function () { /** * ===================================================== * DPlayer Initializer (Scoped by dom_prefix) * ----------------------------------------------------- * - 不使用全局变量 * - 支持一个页面多个播放器 * - 只初始化 data-engine="dplayer" 的模块 * ===================================================== */ function ensurePrefix(root) { if (!root || root.dataset.prefix) { return; } var cls = root.className || ''; var m = cls.match(/([a-z0-9]{4,8})-player/); if (m) { root.dataset.prefix = m[1]; } } function resolveContainer(root) { if (root && root.querySelector) { return root.querySelector('.dplayer, [id="dplayer"]'); } return document.getElementById('dplayer') || document.querySelector('.dplayer'); } function initDPlayer(root, strPlayUrl) { var DomDPlayer = resolveContainer(root); if (!DomDPlayer) { showError(root, '播放器容器不存在'); return null; } // ---- 创建 DPlayer 实例 ---- try { var videoPlayer = new DPlayer({ container: DomDPlayer, autoplay: true, screenshot: false, //logo: dplayerLogo, video: { url: strPlayUrl, type: 'hls', }, pluginOptions: { hls: { maxBufferLength: 600, }, }, }); videoPlayer.play() // ---- 错误处理(兜底)---- videoPlayer.on('error', function () { showError(root, '播放失败,请尝试切换线路'); }); return videoPlayer; } catch (e) { console.log(e) showError(root, '播放器初始化失败'); return null; } } function showError(root, msg) { if (!root || !root.querySelector) { console.warn(msg); return; } ensurePrefix(root); var err = root.querySelector('.' + root.dataset.prefix + '-player-status'); if (!err) { err = document.createElement('div'); err.className = root.dataset.prefix + '-player-status is-error'; root.appendChild(err); } err.innerText = msg; } function boot() { var players = document.querySelectorAll('[data-engine="dplayer"]'); if (!players.length) return; players.forEach(function (root) { ensurePrefix(root); }); } // 获取第一个线路 key(带容错) function getDefaultLine() { if (typeof arrPlayUrl === "undefined" || !arrPlayUrl || typeof arrPlayUrl !== "object") { console.warn("arrPlayUrl 无效:"); return null; } const keys = Object.keys(arrPlayUrl); if (keys.length === 0) { console.warn("没有任何播放线路"); return null; } return keys[0]; // 后端排序,第一位为默认 } // 获取某个线路的第一个 url function getFirstPlayUrl(playLine) { if (!arrPlayUrl || !arrPlayUrl[playLine] || !arrPlayUrl[playLine][0]) { console.warn("播放线路不存在:", playLine, arrPlayUrl); return null; } return arrPlayUrl[playLine][0].url || null; } // DOM Ready document.addEventListener("DOMContentLoaded", function () { try { if (typeof strVideoId == "undefined") return; var root = document.querySelector('[data-engine="dplayer"]'); if (!root) return; ensurePrefix(root); console.log(strPlayType) console.log(boolIsPlayPage) if (typeof strPlayType !== "undefined" && boolIsPlayPage) { // 用户指定线路 if (strPlayType !== "default") { const activeUrl = arrPlayUrl[strPlayType][intPlayUrlIndex - 1]; strPlayUrl = activeUrl.url; // checkLine(strPlayType); // 默认播放第一个线路的第一个 URL } else { const defaultLine = getDefaultLine(); strPlayUrl = getFirstPlayUrl(defaultLine); // checkLine(defaultLine); } console.log('strPlayUrlstrPlayUrl') initDPlayer(root, strPlayUrl); } else if (strPlayType == "default" && !boolIsPlayPage) { const defaultLine = getDefaultLine(); strPlayUrl = getFirstPlayUrl(defaultLine); // checkLine(defaultLine); initDPlayer(root, strPlayUrl); } } catch (error) { console.log(error); } }) })();